Java Swing 错误渲染 GUI 元素(Windows 8.1)?

标签 java swing user-interface netbeans

[已解决]:我有 Lenovo Z500 笔记本电脑,它使用自己的 Intel HD 4000 视频驱动程序。我使用此驱动程序是因为它与我的笔记本电脑键盘上的热键(F11、F12 为屏幕亮度)。我在我的第二台戴尔笔记本电脑上测试了编译的 JAR 文件,一切正常!如果您在预装 Lenovo 驱动程序的 Lenovo 笔记本电脑上渲染 Swing 元素时遇到任何问题,则必须安装 native Intel 驱动程序。

===

我使用 Windows L&F 制作了一个 Swing 应用程序,但在运行(编译)后我看到错误的渲染元素。但!当我使用预览时,一切看起来都很好。这是一些错误屏幕(我认为):

左侧:预览 右侧:运行模式

Preview Mode Run mode

如右图所示,除了运行模式下的按钮之外,每个元素(包括 jTextField、jComboBox、jSpinner 等)的左侧都有一条粗线(类似重复) 。有人知道有什么问题吗?这里有人说是显卡驱动的问题,但是我到底应该怎么做才能解决这个问题呢?

  • 系统:Windows 8.1
  • NetBeans:8.0
  • Java SDK:1.8.0_11

谢谢您的回答!

完整源代码如下:

public static void main(String args[]) {

    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Windows".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(mainWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(mainWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(mainWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(mainWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new mainWindow().setVisible(true);
        }
    });
}

NetBeans 生成的 GUI 元素:

private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jComboBox1 = new javax.swing.JComboBox();
        jTextField1 = new javax.swing.JTextField();
        jSpinner1 = new javax.swing.JSpinner();
        jProgressBar1 = new javax.swing.JProgressBar();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Button");

        jButton1.setText("jButton1");

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jProgressBar1.setMinimum(1);
        jProgressBar1.setValue(25);
        jProgressBar1.setStringPainted(true);

        jLabel2.setText("ComboBox");

        jLabel3.setText("TextField");

        jLabel4.setText("Spinner");

        jLabel5.setText("ProgressBar");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2)
                    .addComponent(jLabel3)
                    .addComponent(jLabel4)
                    .addComponent(jLabel5))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jComboBox1, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jTextField1)
                    .addComponent(jProgressBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 181, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jButton1)
                            .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jButton1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel5))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jProgressBar1, jSpinner1});

        pack();
    }

最佳答案

使用 Windows 8.1 Pro 和 JRE 1.8.0_25,我发现渲染的 GUI 没有问题,这是我的屏幕截图:

enter image description here

关于Java Swing 错误渲染 GUI 元素(Windows 8.1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27201864/

相关文章:

user-interface - 如何在 Unity 中针对所有屏幕尺寸正确缩放文本?

java - LocalDateTime - 使用 LocalDateTime.parse 进行反序列化

java - 如何在几个 JTextField 中显示鼠标的坐标?

java - JTextField水平滚动java swing

java - 如何区分组件是否已被拖动或单击?

c# - WPF 填充列表,为单击事件处理程序分配自定义变量以传递

c++ - 编写 GUI 来显示统计信息

java - 初始化变量和java中的文字有什么区别?

java - 如何在Java中以混合编码将字节数组编码为字符串?

java - 无 Spring Hibernate DAO 和 @Repository 用于异常翻译!这不是依赖吗?