Как вы установите все JLabels, сделанные в списке, чтобы изменить то, что отображается - PullRequest
2 голосов
/ 06 декабря 2011

FIXED

Извините за плохой заголовок, но я трачу на него 5 минут и не могу сформулировать его лучше извините.

Мне нужно иметь его, чтобы, если вы нажмете JButton all, оно получит изображение из all2, а также поместит его в метку JLabel (сделанную со списком)

Я поместил JLabel all2 выше map (), потому что, если я этого не сделал, «ImageIcon setAll не может быть разрешено». Я не поместил метку JLabel над map (), потому что она портится с созданием 100 JLables, сделанных со списком listofLabels. Все, что он мог показать, это один лейбл сигла. enter image description here enter image description here

public class mapMaker {

ArrayList<JLabel> listofLabels = new ArrayList<JLabel>(100);
ImageIcon forest = new ImageIcon("resources/terrains/forest.jpg");
ImageIcon wood = new ImageIcon("resources/terrains/wood.jpg");

JFrame frame = new JFrame("D&D");
JLabel all2=new JLabel( wood);



public map() {
    int a=0,b=50;
    JFrame.setDefaultLookAndFeelDecorated(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(100,0,1000,700);
    frame.getContentPane().setLayout(null);
    frame.setVisible(true);


    JButton all=new JButton("Set All To");
    frame.getContentPane().add(all);
    all.setBounds(600,450,150,50);
    all.setFont(new Font("Courior", Font.BOLD, 25));
    all.addActionListener(boardListener);

    frame.getContentPane().add(all2);
    all2.setBounds(800,450,50,50);
     all.addActionListener(boardListener);


for ( i = 0; i < 100; i++) {
    JLabel label =new JLabel(forest);    
    label.setIcon(forest);
        listofLabels.add(label);
        a=a+50;
        if(a>549) {
            b=b+50;
            a=50;
        }
        frame.getContentPane().add(label);
        label.setBounds(a, b, 50,50);
        label.setTransferHandler(new TransferHandler("icon"));


            }
}


ActionListener boardListener = new ActionListener (){
    public void actionPerformed(ActionEvent e){
ImageIcon setAll=(ImageIcon) all2.getIcon();

![enter image description here][2]label.setIcon(setAll);



    }
    };;

public static void main(String[]args) {
    new map();
}

}

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Я не уверен, что это то, что вы ожидаете:

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
2 голосов
/ 06 декабря 2011

Почему бы просто не выполнить итерацию по массиву (или списку ArrayList) JLabels, установив все значки 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);
        }
     }
  }
};
...