2
嗨,我有一個刷新圖像的問題,添加到JLabel
。它就像控制燈一樣給我們提供線上/線下狀態的信息。當我們啓動應用程序並啓動服務器時,它將調用此方法並將指示燈更改爲綠色。我們當然可以點擊按鈕「離線」,並一直離線。然後光線變紅。現在一切正常,但當我們點擊「上線」時,程序在線,但圖像仍然是紅色。在每個地方都被同樣的方法調用。只是這個燈不工作,因爲連接和斷開工作正常。在JLabel刷新圖像不起作用
我給你一些代碼:
方法,它只是改變了形象:
public void changeLight(String name){
BufferedImage imgtmp;
try {
System.out.println("CHANGE LIGHT: "+name);
imgtmp = ImageIO.read(new File(name));
panelMenuOnline.remove(panelMenuOnlineLight);
panelMenuOnlineLight = new JLabel(new ImageIcon(imgtmp));
panelMenuOnline.add(panelMenuOnlineLight);
} catch (IOException e) {
e.printStackTrace();
}
}
按鈕定義在同一類:
panelMenuButOn = new Guzik("GO ONLINE"){
@Override
public void actionPerformed(ActionEvent e) {
if(!Pang.game.online){
Pang.game.haveToBeOffline = false;
if(Client.checkConnection()) {
JOptionPane.showMessageDialog(this,
"Successfully connected");
Pang.game.online=true;
changeLight(imgGREEN);
} else {
JOptionPane.showMessageDialog(this,
"Connection refused");
}
} else {
JOptionPane.showMessageDialog(this,
"Successfully disconnected");
setText("GO ONLINE");
Pang.game.haveToBeOffline = true;
Pang.game.online=false;
changeLight(imgRED);
}
}
};
我也有螺紋,其(如果我不讓他脫機)測試連接並更換控制燈:
public void run() {
while(true){
Pang.game.online=Client.checkConnection();
if(Pang.game.online){
Pang.game.frame.panelMenuButOn.setText("GO OFFLINE");
Pang.game.frame.changeLight(Pang.game.frame.imgGREEN);
} else {
Pang.game.frame.panelMenuButOn.setText("GO ONLINE");
Pang.game.frame.changeLight(Pang.game.frame.imgRED);
}
//System.out.println("Checked = "+Pang.game.online);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
...但我可以給予好評你的,恕我直言,這是極好回答這個問題。 –
我正在尋找解決方案,但我找不到如何交換標籤中的圖標,因爲我想我必須刪除一個圖標並添加另一個圖標? –
@ user3233685:請參閱我上面的代碼示例。所有你需要做的就是調用JLabel上的'setIcon(Icon icon)'來交換圖標,就是這樣! –