我在JFrame窗口上有多个面板。我每次都会以不同的方式填充每个面板。例如: 我启动GUI :(图像中心面板,右面板,底部面板)。中心面板上有20个按钮,右侧面板有10个按钮,下面板有3个按钮。
GUI的第二次启动(同样的gui)。中心面板有50个按钮,右侧面板有12个按钮,底部有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()
。