У меня есть набор узлов в моей программе, каждый из которых имеет определенное местоположение x, y.и у каждого есть набор значков изображений.
Я хочу нарисовать анимацию изображения для каждого узла в определенном месте.
Вот мой код: (здесь показано только последнее изображение, которое я знаю почему!)
public void showPicture() {
//nodes :
for(int i=0;i<thisGraph.getNode().size();i++){
if(thisGraph.getNode().get(i).getImageIcon()!=(null)){
for(int j=0;j<thisGraph.getNode().get(i).getImageIcon().size();j++){
if(j>0)
lables.get(lables.size()-1).setVisible(false);
JLabel jLabel1 = new JLabel();
lables.add(jLabel1);
jLabel1.setLayout(new GridBagLayout());
jLabel1.setIcon(thisGraph.getNode().get(i).getImageIcon().get(j));
jLabel1.setVisible(true);
jLabel1.setBounds((int)thisGraph.getNode().get(i).getX(),(int)thisGraph.getNode().get(i).getY(),195,163);
jPanel1.add(jLabel1);
}
}
}
}
Этот метод showPicture () вызывается в buttonActionListener.И у меня также есть еще одна кнопка, которую я хочу, чтобы она остановила анимацию изображений для всех меток.
Что я пробовал: Thread.sleep()
-> она замораживает кнопку и показывает только последнее изображение
Я подумал, что должен был использовать таймер, но во всех темах, которые я прошел, они использовали его только на одном ярлыке, а не на нескольких ярлыках.
Edit -> я прочитал эти примеры, приведенные вкомментарии.и вот что я решил, но он все еще застывает кнопку и не работает:
int j = 0;
public void showPicture(){
//nodes :
for(int i=0;i<thisGraph.getNode().size();i++){
if(thisGraph.getNode().get(i).getImageIcon()!=(null)){
j=0;
while( j<thisGraph.getNode().get(i).getImageIcon().size()){
if(j>0)
lables.get(lables.size()-1).setVisible(false);
JLabel jLabel1 = new JLabel();
lables.add(jLabel1);
jLabel1.setLayout(new GridBagLayout());
jLabel1.setIcon(thisGraph.getNode().get(i).getImageIcon().get(j));
jLabel1.setVisible(true);
jLabel1.setBounds((int)thisGraph.getNode().get(i).getX(),(int)thisGraph.getNode().get(i).getY(),195,163);
jPanel1.add(jLabel1);
//
ActionListener act;
act = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jLabel1.setVisible(true);
j++;
}
};
Timer timer = new Timer(1000, act );
timer.start();
timer.stop();
//
}
}
}}