0


我有一个我写的小程序,它有一个 JLabel(包含一个 ImageIcon)和一个 JPanel 内的自定义 ImagePanel。由于某种原因,JLabel 在首次运行/加载时从未出现在 mac os 上的 safari 和 firefox 中,但在其他操作系统(windows、linux)上它看起来很好。现在在同一个小程序中有一个按钮可以将图像翻转到另一个图像。在 mac os 上的 safari/firefox 上,单击按钮时,显示第二张图像,再次单击时,现在出现第一张图像!知道什么可能导致这个问题吗?即使在 Windows 的 safari 上,小程序也可以正常工作.. 即第一个图像加载并出现。

界面代码

    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();
    }

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

4

1 回答 1

2

我什至将 jlabel 设置为 imagepanel,将 jpanel 的布局设置为 null

将布局设置为 null 是您能做的最糟糕的事情。这通常会导致比解决问题更多的问题。

问题不是我希望在哪里显示 jlabel,而是为什么当它显示在 windows/linux firefox/safari 浏览器上时它没有显示在 Mac OS X firefox/safari 浏览器上。

我们怎么知道什么时候只发布了几行代码?SSCCE当你有问题时,发布一个适当的。

在 mac os 上的 safari/firefox 上,单击按钮时,显示第二张图像,再次单击时,现在出现第一张图像!

在可见 GUI 上添加/删除组件时的一般格式是:

panel.add(...);
panel.revalidate();
panel.repaint(); // sometimes needed

当您更改组件的属性时,您永远不需要调用重绘。Swing 足够聪明,可以为您重新绘制。

label.setIcon(new ImageIcon(backImg));
//label.repaint();
于 2013-06-14T15:21:53.563 回答