![](/img/trans.png)
[英]Java: JButton and ArrayList: adding to JPanel from ArrayList
[英]ArrayList<JButton> adding Action listeners with ArrayList
暂时停留在此位置上,经过一番搜索但未找到我要查找的内容后想到,会询问是否有人可以解决我的问题。 目前,对于一个正在进行的小型拼贴项目,我需要一个包含100个按钮的面板,但是每个按钮必须具有一个动作侦听器。 选中此操作侦听器后,必须在网格中报告其编号并更改按钮的文本。
for (int i = 0; i < 100; ++i) //Sets buttons created
{
ArrayList<JButton> testButton = new ArrayList<JButton>(); //Button Text
PlayerGrid1.add( new JButton(" ? ") );
}
该代码是我将按钮添加到ArrayList的方式,但是我遇到的问题是,当我尝试添加操作侦听器时,它引发了有关抽象按钮和其他问题的错误。
JPanel PlayerGrid1 = new JPanel();
PlayerGrid1.setBackground(Color.WHITE);
PlayerGrid1.setBounds(0, 0, 375, 400);
frmBattleships.getContentPane().add(PlayerGrid1);
PlayerGrid1.setLayout(new GridLayout(10, 10, 0, 0));
这是我存储按钮的网格。
如果有人知道如何使用与我相同的方法将侦听器添加到ArrayList或具有指向某人的帖子的链接,将不胜感激。 也只是为了让任何人知道这是不是正确或错误设置,请不要发火,我通常不会问很多堆栈溢出问题。 谢谢。
在for循环之前定义一个映射而不是列表,例如:
Map<String,JButton> buttonMap = new HashMap<String,JButton>();
之后,您应为for循环 “ i”中的每个按钮设置唯一的操作命令,以用于此目的。
for (int i = 0; i < 100; ++i) //Sets buttons created
{
JButton button = new JButton();
button.setActionCommand(String.valueOf(i));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonMap.get(e.getActionCommand()).setText("Whatever you want!");
}
});
buttonMap.put(String.valueOf(i), button);
PlayerGrid1.add(button);
}
试试这个`
JFrame frmBattleships = new JFrame();
JPanel PlayerGrid1 = new JPanel();
PlayerGrid1.setBackground(Color.WHITE);
PlayerGrid1.setBounds(0, 0, 375, 400);
frmBattleships.getContentPane().add(PlayerGrid1);
PlayerGrid1.setLayout(new GridLayout(10, 10, 0, 0));
for (int i = 0; i < 100; ++i) // Sets buttons created
{
ArrayList<JButton> testButton = new ArrayList<JButton>(); // Button
JButton newButton = new JButton("" + i); // Text
newButton.setName("" + i);
newButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(((JButton) e.getSource()).getName());
}
});
PlayerGrid1.add(newButton);
}
frmBattleships.setVisible(true);
`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.