是否可以在GUI按钮中检查文本?

时间:2017-01-07 02:27:04

标签: java button

这是一个非常简单的代码,当我点击一个按钮时,按钮上的文字变为" ..."这是一个名为move的字符串变量。

我想弄清楚的是,是否可以检查if (e.getSource()==)命令中按钮的文本。

JButton [] button;
String move="...";

button =new JButton[25];
for (int a=0;a<25;a++)
{
    button[a]=new JButton();
    p1.add(button[a]); 
    button[a].addActionListener(this);
}   

public void actionPerformed(ActionEvent e)
{
    for (int a=0; a<25;a++)
    {
        if (e.getSource()==button[a])
        {
          button[a].setText(move);
        }
    }
}

所以在上面的代码之后,一个按钮将有文字&#34; ...&#34;在上面。现在我想要的下一个if (e.getSource()==)命令是:如果我点击的按钮有文本(move),请运行代码。

我尝试了数百个随机代码,看看它们是否有效但没有运气:

有点像这样:

if (e.getSource()==button[a].text(move))

OR

if (e.getSource()==button[a].getText.equals(move))

if (The button i click has the text (move) it will run this code)
{
    button[a].setBackground(Color.GREEN); 
}

我对编程很新,我需要这个用于我的Checkers游戏。 是否有可能做我要求的事情?

3 个答案:

答案 0 :(得分:1)

Java中的字符串比较应该使用.equals()而不是==。

答案 1 :(得分:0)

您根据按钮文本检查来源的示例并没有多大意义。您在按钮上添加了一个动作侦听器,而不是该按钮的一个字段。此外,getSource会返回Object,因此如果您需要获取其任何成员值,则需要将其转换为应该的类型。在您的情况下,您返回Object 实际类型JButton

JButton button = new JButton("Hello");
button.addActionListener((e) -> System.out.println(
        e.getSource() instanceof JButton
));
button.doClick();
  

所以,给定一个按钮,你可以得到如下文字:

JButton button = new JButton("Hello");
button.addActionListener((e) -> System.out.println(
    ((JButton)e.getSource()).getText()
));
button.doClick();
  

您好

所以,检查move反对就是这样:

String move = "Howdy";
JButton button = new JButton("Hello");
button.addActionListener((e) -> System.out.println(
    ((JButton) e.getSource()).getText().equals(move)
));
button.doClick();
  

另一件需要注意的事情是,当你通过getSource获得一个按钮实例时,你不需要在使用之前在数组中找到该实例;它通过动作监听器返回给你。例如,运行以下代码:

JButton[] buttons = new JButton[10];
Random r = new Random(System.currentTimeMillis());
String newText = "New";
for (int i = 0; i < buttons.length; ++i) {
    buttons[i] = new JButton(String.valueOf(r.nextInt()));
    buttons[i].addActionListener((e) -> ((JButton)e.getSource()).setText(newText + " " + r.nextInt()));
}
Arrays.stream(buttons).forEach(b -> {
    System.out.println(b.getText());
    b.doClick();
    System.out.println(b.getText());
});

答案 2 :(得分:0)

也许你的意思是这样的:

if (e.getSource() == button[a]) {
    if (button[a].getText().equals(move)) {
        // do some logic here
        button[a].setBackground(Color.GREEN);
    }
}