【问题标题】:JMenuBar causes content pane to repaint incorrectlyJMenuBar 导致内容窗格重新绘制不正确
【发布时间】:2011-11-26 19:02:29
【问题描述】:

我在使用 JMenuBar 时遇到了一个非常奇怪的问题,在两个 JMenu 之间导航会导致菜单所属的 JFrame 的 contentPane 重新绘制不正确。内容窗格仅在菜单项下拉并“弄脏”屏幕的位置显示正确的背景——其余部分完全是白色的。但是,这只发生在浏览两个菜单之后,而不是立即发生。空的 contentPane 需要几秒钟的切换才能从普通的背景颜色改变。

编辑澄清一下,这是在使用 JDK 1.7.0 的 Windows 7 上。

为了更好地说明我的意思,这是启动后的窗口(手动调整大小):

然后在使用 JMenus 几秒钟后:

下面是一个 SSCCE 演示有问题的代码。

package com.test.workspace;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;

public class MenuBarTest extends JFrame {

    /**
     * Eclipse-generated SUID.
     */
    private static final long serialVersionUID = 8836700685077107497L;

    public MenuBarTest() {
        JMenuBar menuBar = new JMenuBar();

        JMenu testMenu = new JMenu("Test");
        JMenuItem testItem = new JMenuItem("TestItem");

        JMenu breakMenu = new JMenu("Break");
        JMenuItem breakItem = new JMenuItem("BreakItem");

        testMenu.add(testItem);

        breakMenu.add(breakItem);

        menuBar.add(testMenu);
        menuBar.add(breakMenu);

        this.setJMenuBar(menuBar);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                MenuBarTest test = new MenuBarTest();
                test.setDefaultCloseOperation(EXIT_ON_CLOSE);
                test.pack();
                test.setVisible(true);
            }           
        });
    }
}

【问题讨论】:

  • 在 XP 上使用 JDK6_7 没有发现任何问题。
  • Mac OS X 上没有人工制品。内容窗格的opacity 是否有可能不被兑现?
  • @trashgod 我考虑过不透明度,但设置 setOpaque(true) 对我没有任何影响,所以我将它排除在 SSCCE 之外。我开始怀疑它是否确实是一个特定于平台的错误——下一步是让我在不同的操作系统或 JDK 上检查它。
  • 当你给 JFrame 一些内容时会发生什么?
  • 向框架添加JLabel 可防止问题发生。在这一点上,我想它一定是一个相对较小的特定于平台的错误。

标签: java swing


【解决方案1】:

它必须是特定于平台的东西。 GUI 在我的机器上看起来不错:Ubuntu 11.10、Eclipse 3.7、Sun JDK 7。

【讨论】:

  • 发布后,我一直怀疑它可能与 JDK1.7 相关,但现在我更加迷失了。是时候在 XP 或 JDK1.6 上尝试了。
猜你喜欢
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
相关资源
最近更新 更多