0

我正在写一个程序,我遇到了一个问题......

我创建了 1 个 JLabel 数组和 1 个 JButton 数组。JLabel 数组包含一个字符串,即俱乐部名称。JButton 数组包含一个仅显示“编辑”的字符串。

For 循环然后根据 clubs 数组的长度填充每个数组,并为每个按钮添加一个动作侦听器。

当用户单击与 JLabel 对应的 JButton 时,它会启动一个事件。在这种情况下,我需要找出与 JButton 匹配的 JLabel 中存储的值。

由于事件侦听器不知道它在循环中,因此我无法使用它。

如何实现我想要的目标?

请参阅下面的代码。

JLabel clubs[]      = new JLabel[99];
JButton editAClub[] = new JButton[99];

for(int i=0; i <= (allClubs.length - 1);i++)
{
    clubs[i]        =   new JLabel("Club " + i);
    editAClub[i]    =   new JButton("Edit");
    editAClub[i].addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            selectedClub = clubs[i].getText().toString();
            System.out.println(selectedClub);
        }
    });
}   
4

1 回答 1

1

我会创建一个 Buttons 和 JLabels 的映射,并在 actionListener 中传递动作的来源:

JLabel clubs[]      = new JLabel[99];
JButton editAClub[] = new JButton[99];

//create a map to store the values
final HashMap<JButton,JLabel> labelMap = new HashMap<>(); //in JDK 1.7

for(int i=0; i <= (allClubs.length - 1); i++)
{
    clubs[i]        =   new JLabel("Club " + i);
    editAClub[i]    =   new JButton("Edit");

    //add the pair to the map
    labelMap.put(editAClub[i],clubs[i]);

    editAClub[i].addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            //get the label associated with this button from the map
            selectedClub = labelMap.get(e.getSource()).getText(); // the toString() is redundant
            System.out.println(selectedClub);
        }
    });
}   

这样,按钮和标签通过单独的数据结构相互关联,而不仅仅是通过它们各自数组中的索引。

于 2013-04-06T18:25:13.500 回答