Java 如何设置列表中的所有JLabel以更改显示内容

Java 如何设置列表中的所有JLabel以更改显示内容,java,swing,list,jbutton,jlabel,Java,Swing,List,Jbutton,Jlabel,固定的 我为这个糟糕的标题感到抱歉,但我花了5分钟在上面,无法用更好的措辞表达抱歉 我需要有它,这样,如果你按下JButton all,它会在all2中获取图像,并将其放入JLabel标签(用列表制作) 我将JLabel all2放在map()之上,因为如果我不这样做,“ImageIcon setAll无法解析”。我没有将JLabel标签放在map()的上方,因为它会把创建100个用标签列表创建的jlable搞砸。它所显示的只是一个单一的标签。 公共类映射器{ ArrayList listof

固定的

我为这个糟糕的标题感到抱歉,但我花了5分钟在上面,无法用更好的措辞表达抱歉

我需要有它,这样,如果你按下JButton all,它会在all2中获取图像,并将其放入JLabel标签(用列表制作)

我将JLabel all2放在map()之上,因为如果我不这样做,“ImageIcon setAll无法解析”。我没有将JLabel标签放在map()的上方,因为它会把创建100个用标签列表创建的jlable搞砸。它所显示的只是一个单一的标签。

公共类映射器{
ArrayList listofLabels=新的ArrayList(100);
ImageIcon森林=新的ImageIcon(“resources/terrains/forest.jpg”);
ImageIcon wood=新的ImageIcon(“资源/地形/wood.jpg”);
JFrame=新JFrame(“D&D”);
JLabel all2=新JLabel(木材);
公共地图(){
INTA=0,b=50;
JFrame.setDefaultLookAndFeelDecorated(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架立根(100,01000700);
frame.getContentPane().setLayout(null);
frame.setVisible(true);
JButton all=新JButton(“全部设置为”);
frame.getContentPane().add(全部);
所有立根(600450150,50);
all.setFont(新字体(“Courior”,Font.BOLD,25));
all.addActionListener(boardListener);
frame.getContentPane().add(全部2);
所有2个立根(800450,50,50);
all.addActionListener(boardListener);
对于(i=0;i<100;i++){
JLabel标签=新的JLabel(森林);
label.setIcon(森林);
标签列表。添加(标签);
a=a+50;
如果(a>549){
b=b+50;
a=50;
}
frame.getContentPane().add(标签);
标签.立根(a,b,50,50);
label.setTransferHandler(新的TransferHandler(“图标”));
}
}
ActionListener boardListener=新建ActionListener(){
已执行的公共无效操作(操作事件e){
ImageIcon setAll=(ImageIcon)all2.getIcon();
![在此处输入图像描述][2]标签。设置图标(设置全部);
}
};;
公共静态void main(字符串[]args){
新地图();
}

}

为什么不简单地遍历JLabel的数组(或ArrayList),将所有JLabel的图标设置为选定的图标

例如:

ActionListener boardListener = new ActionListener() {
  public void actionPerformed(ActionEvent e) {
     if (e.getActionCommand().equals("Set All To")) {
        ImageIcon setAll = (ImageIcon) all2.getIcon();
        for (JLabel label : listofLabels) {
           label.setIcon(setAll);
        }
     }
  }
};

我不确定这是否是您所期望的:

ActionListener boardListener = new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Set All To")) {
          Icon setAllIcon = all2.getIcon();

          for (JLabel label : listofLabels)
            label.setIcon(setAllIcon);
        }
    }
};;
编辑,因为它工作正常,因为提到的代码中有轻微的错误:

与此相反:

all.addActionListener(boardListener);

frame.getContentPane().add(all2);
all2.setBounds(800,450,50,50);
 all.addActionListener(boardListener);
看起来您要执行以下操作:

all.addActionListener(boardListener);

frame.getContentPane().add(all2);
all2.setBounds(800,450,50,50);
all2.addActionListener(boardListener); // This is the changed line

根据你的描述,我无法理解你的问题。为什么不创建一个JLabel数组,并简单地遍历数组,将所有JLabel的图标设置为所选的图标?将其作为答案,我将继续it@Russell,这段代码有很多错误(例如,空布局管理器、幻数、违反命名约定、缺少OOP设计…)。这是因为它最初是一个较长的代码,但我很快将其删减,无法理解stackoverflow的格式:)请学习java命名约定并坚持使用按钮。setIcon(setAll)几乎修复了它,但它表示无法在数组类型JButton[]@Russell上调用setIcon(ImageIcon),“迭代数组…”我现在正在努力解决这个问题,但是如果你有任何想法,请评论修复它,只是为了(int i=0;i@Russell:请参阅编辑。另外,如果代码中的更改不起作用,请编辑您的问题以显示代码,并发布注释提醒我更改。这将是另一种方法。是的,因为您没有对我的格式进行垃圾处理,所以将其加高:)(并且因为我认为它有效)
all.addActionListener(boardListener);

frame.getContentPane().add(all2);
all2.setBounds(800,450,50,50);
all2.addActionListener(boardListener); // This is the changed line