我在JFrame窗口上有多个面板。我将每次都以不同的方式填充每个面板。例如: 我启动GUI :(图像中心面板,右侧面板,底部面板)。中央面板上有20个按钮,右侧面板上有10个按钮,底部面板上有3个。java检测点击按钮
第二次启动GUI(同样的gui)。中央面板有50个按钮,右侧面板有12个按钮,底部有3个。
所以每次都有一个随机数的按钮,不可能全部都是唯一命名的。 鉴于我没有每个按钮的唯一名称(只是一个列表),我想知道哪些按钮是根据它们所属的面板点击的。那可能吗?
我在JFrame窗口上有多个面板。我将每次都以不同的方式填充每个面板。例如: 我启动GUI :(图像中心面板,右侧面板,底部面板)。中央面板上有20个按钮,右侧面板上有10个按钮,底部面板上有3个。java检测点击按钮
第二次启动GUI(同样的gui)。中央面板有50个按钮,右侧面板有12个按钮,底部有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
}
}
ActionEvent有一个getSource()方法,该方法将作为被点击的按钮的引用。如果需要,您可以检查按钮的操作命令。
如果您想知道哪个面板包含该按钮,请尝试在JButton本身上调用getParent()
。按照camickr的建议,要找出哪个按钮被点击,请在ActionEvent上使用getSource()
。
为什么这么多按钮?这给我带来了糟糕的用户界面味道。也许如果你给了我们更多关于你想要完成的事情的线索。如果按钮足够重要,可以在屏幕上显示,他们可能应该被命名为变量。 – I82Much 2010-05-25 03:37:57