交换2个特定的JButton

时间:2015-08-24 06:42:09

标签: java arrays button matrix swap

我有一个关于用Java编码的快速(或不是)问题。

当我点击其中一个时,有没有办法可以交换2个JButton中的文本,或者按钮本身?比如,每个按钮都有一个特定的其他按钮,只需点击一下就可以替换它。 虽然在我的代码中它不是整数,而是字符串“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) {
    }
  }

提前谢谢!

2 个答案:

答案 0 :(得分:1)

在这行代码中

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

您想比较两个String,而不是参考。 我认为您应该使用函数==替换String.equals(Object object)运算符。

像这样:

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

修改

如果您有两个具有相同值的String变量,则它们对该值具有相同的引用,因为在Java中String不可变。但他们不会有相同的地址。这里有一个例子:

Illustration of the String in Java

因此==运算符会比较变量ab地址,而不是值。函数String.equals(Object object)将比较变量ab

答案 1 :(得分:0)

这里的问题是您使用的是==而不是String1.equals(String2)。这可以用来比较字符串。 在这里比较你只是在字符串上交换文本。你提到了如何更改按钮。我不明白这一点。可能是你想在同一个地方创建另一个按钮。然后,您可以创建具有相同位置坐标的另一个Button对象,并隐藏当前按钮(更改可见性)。