0

真的很感激一个答案:我有几个用这个生成的 JButton:

for(int i = 0; i < buttons.length; i++){
        buttons[ i] = new JButton(blank);
        if(i == 3 || i == 6){
            newLine++;
            lineCount = 0;
        }
        buttons[ i].setBounds(lineCount*150,newLine*150,150,150);
        cont.add(buttons[ i]);
        buttons[ i].addActionListener(this);
        lineCount++;
    }

所以他们当然没有全局名称......

因此,我需要知道如何从 JButton 中“取出”图像,这样我就知道它是什么类型的按钮或者能够通过名称识别按钮( ?)。
那么我该怎么做呢?谢谢!

顺便说一句,cont是一个java.awt.Container

4

3 回答 3

4

我没有找到基于图标识别按钮的好方法。您的组件(包括JButtons)可以具有可用于标识的名称。这就是验收测试工具的工作原理。

button.setName(uniqueName);
button.getName();
于 2012-11-07T06:53:30.680 回答
2

在 JButton 上设置和获取图像图标的使用setIcon()和方法getIcon()

编辑有问题,要求编辑回答:

最好使用以下任一方法识别按钮:

  1. Component.getName()Component.setName()
  2. getText()和使用不同的字符串setText()
于 2012-11-07T06:49:00.450 回答
2

用于putClientProperty识别 JComponent

buttons[i][j].putClientProperty("column", i);
buttons[i][j].putClientProperty("row", j);
buttons[i][j].addActionListener(new MyActionListener());

并从 ActionListener 获取(例如)

public class MyActionListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton btn = (JButton) e.getSource();
        System.out.println("clicked column " + btn.getClientProperty("column")
                + ", row " + btn.getClientProperty("row"));
}

但正确的方法JButton应该是使用Swing Action而不是ActionListener

于 2012-11-07T08:51:35.390 回答