我有一个我写的applet,它有一个JLabel(包含一个ImageIcon)和一个JPanel内的自定义ImagePanel。出于某种原因,JLabel NEVER在首次运行/加载时在mac os上显示safari和firefox,但在其他操作系统(windows,linux)上显示正常。现在在同一个小程序中,有一个按钮可以将图像翻转到另一个图像。在mac os上的safari / firefox上,当点击按钮时,第二个图像显示,再次点击时,第一个图像现在出现!!知道是什么导致了这个问题吗?即使在Windows的safari上,applet工作正常..即第一个图像加载并出现。
UI代码
public void createUI(){
mainpanel = new JPanel();
mainpanel.setMaximumSize(new Dimension(154, 212));
mainpanel.setMinimumSize(new Dimension(154, 212));
mainpanel.setName("mainPanel");
mainpanel.setLayout(new BorderLayout());
lcdpanel = new ImagePanel(bgLcdImage);
lcdpanel.setBounds(22, 22, 110, 28);
bgImage = Toolkit.getDefaultToolkit().createImage(bytes);//BufferedImage
label = new JLabel(new ImageIcon(bgImage));
mainpanel.add(lcdpanel);
mainpanel.add(label);
mainpanel.invalidate();
getContentPane().add(mainpanel);
repaint();
}
按钮点击代码
private void flipImage()
{
label.setIcon(new ImageIcon(backImg));
label.repaint();
lcdpanel.setVisible(false);
lcdpanel.repaint();
mainpanel.repaint();
this.repaint();
}
任何帮助将不胜感激。
谢谢
答案 0 :(得分:2)
我甚至将jlabel作为imagepanel,将jpanel的布局设置为null
将布局设置为null是您可以做的最糟糕的事情。这通常会导致比解决问题更多的问题。
问题不在于我想要显示jlabel,而是为什么它在Mac OS X firefox / safari浏览器上没有显示,当它显示在windows / linux firefox / safari浏览器上时。
我们怎么知道什么时候只发布几行代码?遇到问题时发布适当的SSCCE
。
在Mac OS上的safari / firefox上,单击该按钮时,第二个图像显示,再次单击时,第一个图像现在出现!!
在可见GUI上添加/删除组件时的一般格式是:
panel.add(...);
panel.revalidate();
panel.repaint(); // sometimes needed
更改组件的属性时,永远不需要调用重绘。 Swing很聪明,可以为你重新粉刷。
label.setIcon(new ImageIcon(backImg));
//label.repaint();