java检测点击按钮

时间:2010-05-25 03:05:03

标签: java

我在JFrame窗口上有多个面板。我每次都会以不同的方式填充每个面板。例如: 我启动GUI :(图像中心面板,右面板,底部面板)。中心面板上有20个按钮,右侧面板有10个按钮,下面板有3个按钮。

GUI的第二次启动(同样的gui)。中心面板有50个按钮,右侧面板有12个按钮,底部有3个。

因此,每当有一个随机数量的按钮时,就不可能全部唯一命名。 鉴于我没有每个按钮的唯一名称(只是一个列表),我想知道根据它们所属的面板点击了哪些按钮。那可能吗?

3 个答案:

答案 0 :(得分:3)

不知何故正在创建按钮;我们假设您以某种方式对它们进行编号,以便以后检索。

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.List;
import java.util.ArrayList;
import javax.swing.JButton;


public class ButtonTest extends JFrame implements ActionListener {

    public ButtonTest() {
        super();
        initGUI();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    private final List<JButton> buttons = new ArrayList<JButton>();
    private static final int NUM_BUTTONS = 20;

    public void initGUI() {
        JPanel panel = new JPanel();
       for (int i = 0; i < NUM_BUTTONS; i++) {
           String label = "Button " + i;
           JButton button = new JButton(label);
           button.setActionCommand(label);
           button.addActionListener(this);
           buttons.add(button);
           panel.add(button);
       }
       getContentPane().add(panel);
    }

    public static void main(String[] args) {
        new ButtonTest();
    }

    public void actionPerformed(ActionEvent e) {
        String actionCommand = ((JButton) e.getSource()).getActionCommand();
        System.out.println("Action command for pressed button: " + actionCommand);
        // Use the action command to determine which button was pressed
    }


}

答案 1 :(得分:1)

ActionEvent有一个getSource()方法,它将是对单击按钮的引用。如果需要,您可以检查按钮的操作命令。

答案 2 :(得分:1)

如果您想知道哪个面板包含该按钮,请尝试在JButton上调用getParent()。要找出被点击的按钮,正如camickr建议的那样,在ActionEvent上使用getSource()