2015-08-24 3 views
2

У меня есть быстрый (или нет) вопрос о кодировании на Java.Обмен 2 конкретных JButtons

Есть ли способ обменять тексты на 2 JButtons или на кнопки, когда я нажимаю только один из них? Например, каждая кнопка имеет определенную другую кнопку, которую нужно заменить одним нажатием. Хотя в моем коде это не целые числа, а строки «X» и «Y».

Вот мой код:

package game; 

import java.awt.Container; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 

public class Game extends JFrame implements ActionListener{ 

    public static void main(String[] args) { 
    int row = 5; 
    int col = 5; 
    Game gt = new Game(row, col); 
    gt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    gt.pack(); 
    gt.setVisible(true); 

    } 

    String X = "X"; 
    String Y = "Y"; 
    int i = 0; 
    int j = 0; 

    public Game(int row, int col) { 
    Container pane = getContentPane(); 
    pane.setLayout(new GridLayout(row, col)); 
    for(int i = 0; i < 25; i++) 
    { 
     if(i == 1 || i == 2 || i == 14 || i == 15 || i == 23 || i == 9) 
     { 
     JButton button = new JButton(X); 
     pane.add(button); 
     button.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
      if (e.getSource()==button) 
      { 
       if(button.getText() == Y) button.setText(X); 
         else button.setText(Y); 
      } 
      } 

     } 
    ); 
     } else if(i == 3 || i == 5 || i == 10 || i == 19 || i == 21 || i == 22){ 
     JButton button = new JButton(Y); 
     pane.add(button); 
     button.addActionListener(new ActionListener() 
     { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       if (e.getSource()==button) 
      { 
       if(button.getText() == Y) button.setText(X); 
        else button.setText(Y); 
      } 
      } 

     }); 
     } else { 
     JButton button = new JButton(); 
     pane.add(button); 
     button.setEnabled(false); 
     button.setBorderPainted(false); 
     } 
    } 
    } 
    @Override 
    public void actionPerformed(ActionEvent e) { 
    } 
    } 

Спасибо заранее!

+0

Ваш код выглядит как ОК, некоторые очевидные ошибки синтаксиса. В чем проблема, с которой вы столкнулись? – KDM

+0

Ну, код запускает массив, поэтому я бы не сказал, что с ним есть проблема. Я спрашивал, есть ли способ обменять два конкретных JButtons, если я нажму только один из них. Например, у меня есть массив, подобный этому http://puu.sh/jMukP/a7796f7df6.png ... И когда я нажимаю первый X, например, в первой строке, я хочу, чтобы он повернулся к Y и один на противоположной стороне (Y), чтобы превратиться в X и наоборот. Просто, чтобы кнопки переключались со своими противоположностями. – Sara

+0

Какие две кнопки вы хотите поменять местами? Я не вижу ссылки на кнопку «other» в прослушивателе действий. – KDM

ответ

1

В этой строке кода

if(button.getText() == Y) button.setText(X); 

Вы хотите сравнить значениедвух String, не ссылка. Я думаю, вы должны заменить оператора == функцией String.equals(Object object).

Как это:

if(button.getText().equals(Y)) button.setText(X); 

EDIT:

Если у вас есть два String переменных с одинаковым значением, они будут иметь ту же ссылку на значение, потому что в Java String являются непреложными. Но у них не будет такого же адреса. Вот пример:

Illustration of the String in Java

Так оператор == сравнивает адрес переменной a и b, а не значение. И функция String.equals(Object object) будет сравнивать значение переменной a и b.

+0

Хорошо, я изменил его, хорошо работает. Какая разница? Когда вы сравниваете значения и ссылки? – Sara

+0

Я редактировал свой пост с некоторыми пояснениями. – JeanMel

+0

В этом случае не имеет значения, будем ли мы использовать 'equals' или' == '- хотя я согласен, что использование' equals' более идиоматично и должно быть предпочтительным. – KDM

0

Проблема в том, что вы используете == вместо String1.equals (String2). Это можно использовать для сравнения строк. При сравнении здесь вы только обмениваетесь текстами на String. Вы упомянули об изменении кнопок как таковых. Я так и не понял. Может быть, вы хотели создать еще одну кнопку в том же месте. Затем вы можете создать другой объект Button с одинаковыми координатами положения и сделать текущую кнопку скрытой (изменить видимость).

+0

Я был направлен к этому вопросу выше, но спасибо вам в любом случае. Ну, нет, я бы хотел сделать так, чтобы две кнопки меняли позиции или только их тексты, подобные этому http://puu.sh/jMwYO/ee880bce41.png, только нажав на один из них. Например, я нажимаю на X, и он превращается в Y, а Y - «подключен» к X. – Sara

+0

Хорошо. Тогда просто измените текст. –

+0

Да, я тоже так думал. Но мне трудно понять, как я могу изменить текст на обеих кнопках, нажав только один из них? – Sara