繁体   English   中英

数组列表 <JButton> 使用ArrayList添加Action侦听器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM