2011-01-26 3 views
0

У меня проблема с моим скриптом; Я хочу, чтобы перекрашивать новый образ (еще один показан) при нажатии кнопки, но кнопка не делает ничего ...Java repaint image

ActionListener one = new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       panel2.revalidate(); 
       panel2.repaint(); 
      } 
     }; 

     btn1.addActionListener(one); 



     JLabel test1 = new JLabel(myDeckOfCards.giveCardPlayer1().getImage()); 

     panel2.add(lab1); 
     panel2.add(test1); 
     panel2.add(pn5); 
     panel2.add(pn1); 
     panel2.add(btn1); 
+0

На самом деле, ActionListener баттона ** делает ** сделать что-то - это перерисовывает свои JPanel. Но вы не меняете отображаемое изображение, поэтому его перекраска не будет иметь никакого эффекта. Я согласен с fd - покажу ваши изображения в значке JLabel. JPanel может удерживать эту JLabel, если это необходимо. –

+0

Я не понимаю, что вы sugest. извините за это – anvd

ответ

5

Внутри actionPerformed вам нужно достать из вашего JLabel и вызвать setIcon() на он, переходя в новое изображение.

Там несколько способов, чтобы получить JLabel, один, чтобы убедиться, что у вас есть final переменные, объявленных содержать где-нибудь в области вашего метода actionPerformed, а другой, чтобы найти его внутри panel2 (не рекомендуется).

Вы можете также передать его в свой ActionListener через конструктор, если вы объявите полноценный класс для этой цели.

EDIT:

final JLabel test1 = new JLabel(myDeckOfCards.giveCardPlayer1().getImage()); 

ActionListener one = new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     // Get 'anotherIcon' from somewhere, presumably from a similar 
     // place to where you retrieved the initial icon 
     test1.setIcon(anotherIcon); 
    } 
}; 

btn1.addActionListener(one); 

panel2.add(lab1); 
panel2.add(test1); 
panel2.add(pn5); 
panel2.add(pn1); 
panel2.add(btn1); 
+0

извините, но я не понимаю, что вы предложили, можете ли вы показать мне пример? – anvd

+0

Добавлен пример –

+0

Я очень ценю вашу помощь, спасибо, проблема решена – anvd