Jpanel没有出现在野生动物园中

时间:2013-06-14 10:56:38

标签: java swing applet japplet


我有一个我写的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();
    }

任何帮助将不胜感激。
谢谢

1 个答案:

答案 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();