这是一个Swing Java 7渲染错误吗?

Jon*_*nas 9 java swing java-7

我做了一个简单的Swing应用程序.但渲染表现出错误.我做错了什么或者它是一个错误?

这是一个简单的小型JFrame,带有文本字段,按钮和空列表.如果我首先水平调整窗口大小然后键入文本字段,按钮会突然消失.

这是我的代码:

public class App extends JFrame {

    public App() {

        JTextField messageFld = new JTextField();
        JButton saveBtn = new JButton("Save");

        JPanel inputPanel = new JPanel(new BorderLayout());
        inputPanel.add(messageFld, BorderLayout.CENTER);
        inputPanel.add(saveBtn, BorderLayout.EAST);

        JList<Data> list = new JList<Data>();
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(inputPanel, BorderLayout.NORTH);
        panel.add(list, BorderLayout.CENTER);

        this.getContentPane().add(panel);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Test application");
        this.pack();
        this.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new App();
            }
        });
    }

}
Run Code Online (Sandbox Code Playgroud)

以下是一些截图:

  1. 在启动时

    在此输入图像描述

  2. 水平调整大小后

    在此输入图像描述

  3. 在文本字段中列出了几个字符

    在此输入图像描述

  4. 将鼠标移到按钮上后

    在此输入图像描述

我使用Windows 7,Java 1.7.0和Eclipse Indigo SR1.我使用的是JDK 1.7.0.0,现在升级到JDK 1.7.0.10,但我仍然遇到同样的问题.

当我打印系统属性时,我得到这个结果:

System.out.println(System.getProperty("java.version"));
System.out.println(System.getProperty("java.runtime.version"));

> 1.7.0_01
> 1.7.0_01-b08
Run Code Online (Sandbox Code Playgroud)

小智 9

如果问题是由您的图形驱动程序引起的,设置下面的系统属性之一可能会有所帮助.不太确定Java 7中是否仍支持道具.

sun.java2d.d3d=false
sun.java2d.ddoffscreen=false
sun.java2d.noddraw=true
Run Code Online (Sandbox Code Playgroud)

  • 为我的JVM启动选项设置-Dsun.java2d.d3d = false清除了很多渲染错误:JDK7/Windows7. (2认同)