2010-05-25 295 views
0

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

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

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

+0

为什么这么多按钮?这给我带来了糟糕的用户界面味道。也许如果你给了我们更多关于你想要完成的事情的线索。如果按钮足够重要,可以在屏幕上显示,他们可能应该被命名为变量。 – I82Much 2010-05-25 03:37:57

回答

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

ActionEvent有一个getSource()方法,该方法将作为被点击的按钮的引用。如果需要,您可以检查按钮的操作命令。

1

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