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)'来交换图标,就是这样! –