找到Java JButton数组的索引

时间:2015-07-02 19:30:47

标签: java arrays swing jbutton

我正在编写一个Java程序,其中有一系列按钮(不是计算器!),我正在寻找一种有效的方法来了解哪个JButton被点击了。根据我目前对Java的了解,唯一的方法是将它们全部放在同一个ActionListener中,然后循环查找匹配项。

我刚想到的另一个解决方案是扩展JButton以在构造函数中包含唯一的ID号变量。在检查instanceof后将事件对象强制转换为JButton时,似乎应该可以工作。有点像使用VB的Tag属性,该属性被分配给索引号。

有更好/更优雅的方式吗?

4 个答案:

答案 0 :(得分:5)

  

有更好/更优雅的方式吗?

指向Javadocs的链接:putClientProperty()getClientProperty()

答案 1 :(得分:0)

我以前的方式是使用actionPerformed用于不同的按钮。与我见过的其他方式相比,我更喜欢它。

public void actionPerformed(ActionEvent clicking)
{
    if (clicking.getSource() == button[0])
        // Do this
    if (clicking.getSource() == button[1])
        // Do something different
}

由于您构建了一个数组,因此可以将ID放在该0的位置,这是您的唯一ID。

答案 2 :(得分:0)

以下是我最近几个月编写的程序示例。 我有一个名为Position

的枚举
public enum Position {
    BB, SB, BU, CO, MP3, MP2, MP1, EP3, EP2, EP1;
}

并且有一些JToggleButtons,每个都持有自己的位置。

public class PositionButton extends JToggleButton {
    private final Position p;

    public PositionButton(Position p) {
        this.p = p;
        setText(p.toString());
        setActionCommand(p.toString());
    }

    public Position getPosition() {
        return p;
    }
}

这允许您在循环中创建按钮并直接从按钮获取值而不进行比较:

ActionListener positionListener = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        PositionButton b = (PositionButton )e.getSource();
        Position p = b.getPosition();
        //do something with Position
    }
}

for (Position p : Position.values()) {
    PositionButton b = new PositionButton (p);
    b.addActionListener(positionListener);
}

答案 3 :(得分:-1)

为每个按钮添加单独的动作侦听器。