【问题标题】:Swapping 2 specific JButtons交换 2 个特定的 JButton
【发布时间】:2015-11-17 11:57:52
【问题描述】:

我有一个关于 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) {
    }
  }

提前谢谢你!

【问题讨论】:

  • 您的代码似乎没问题,有一些明显的语法错误。您面临的问题是什么?
  • 好吧,代码运行数组,所以我不会说它有任何问题。我要问的是,如果我只点击其中一个,是否有办法交换两个特定的 JButton。例如,我有这样的数组puu.sh/jMukP/a7796f7df6.png ...当我单击第一个 X 时,例如,在第一行,我希望它转向 Y,而另一侧(Y)的那个变成X,反之亦然。只是,按钮交换它们的对立面。
  • 你想交换哪两个按钮?我在动作监听器中没有看到对other 按钮的引用。
  • 嗯,就是这样,我不知道如何进行交换,所以问题是我如何才能做到这一点。当我单击其中一个时,它们应该像这样puu.sh/jMwYO/ee880bce41.png 进行交换...我尝试使用 for 并将它们交换到具有 [i] 值的数组中,但随后出现错误,例如“仅从从未写过”等。

标签: java arrays button matrix swap


【解决方案1】:

在这行代码中

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

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

像这样:

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

编辑:

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

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

【讨论】:

  • 好吧,我改了,效果很好。有什么区别呢?当您比较值和参考时?
  • 在这种情况下,我们使用equals 还是== 都没有关系——尽管我同意使用equals 更符合习惯并且应该是首选。
  • 啊,好的,我明白了。谢谢!
【解决方案2】:

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

【讨论】:

  • 我是针对上述问题的,但无论哪种方式都感谢您。好吧,不,我想让 2 个按钮交换位置,或者只是像 puu.sh/jMwYO/ee880bce41.png 这样的文本,只需单击其中一个即可。就像,我点击 X,它变成 Y,它“连接”到的 Y 变成 X。
  • 好的。然后只需更改文本即可。
  • 是的,我也这么认为。但是我无法弄清楚如何通过单击其中一个按钮来更改两个按钮上的文本?
  • 为此,您需要有一些方法来存储哪个按钮是另一个按钮的对应对。您需要获取对按钮对象。也许您可以将所有按钮对象放在一个数组中并使用索引来映射对关系。
猜你喜欢
  • 2018-03-01
  • 1970-01-01
  • 2013-01-10
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
相关资源
最近更新 更多