【问题标题】:Java Swing wrong rendering GUI elements (Windows 8.1)?Java Swing 错误渲染 GUI 元素(Windows 8.1)?
【发布时间】:2014-11-29 11:48:57
【问题描述】:

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

===

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

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

如右图所示,我们在每个元素(包括 jTextField、jComboBox、jSpinner 等)的左侧都有一条粗线(如重复),除了 Buttons 在运行模式 .有人知道有什么问题吗?有人说是显卡驱动有问题,请问我该怎么解决这个问题呢?

  • 系统:Winodows 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();
    }

【问题讨论】:

  • 请编辑您的问题以包含一个minimal, complete example,以展示您描述的问题。您在开发的这个阶段使用 GUI 编辑器可能是个问题; minimal 将排除任何生成的代码,但 complete 足以让具有您的设置的人运行。
  • for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Windows".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; }} 所以 Windows PLAF 用于 Windows 和其他的?我所说的“其余的东西”是指让 OS X 和 Linux/Unix 去看看 ..Metal(不寒而栗)。为什么不改为UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());?生成的 PLAF 将是用于 Windows 的 Windows 7、用于 OS X 和 GTK 的 Aqua 或用于基于 Linux 和 Unix 的系统的 CDE/Motif。
  • 谢谢,我试试这个例子!
  • @AndrewThompson,我试过你的方法,但一切看起来都一样(这里的代码示例:public static void main(String args[]) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());...
  • “但一切看起来都一样” ..你使用Windows吗? (检查屏幕截图,当然可以)。关键是它在 OS X 和 Linux/Unix 上看起来会有所不同(与默认的 Metal PLAF)!

标签: java swing user-interface netbeans


【解决方案1】:

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

【讨论】:

  • 嗯..真奇怪)我有Windows 8.1 SL,但结果与你的不同......你能告诉我你有什么视频卡吗?
  • @alexkowalski 我有一块便宜的显卡:Mobile Intel(R) 4 Series Express Chipset Family
  • 我发现了一个问题!我有联想 Z500 笔记本,它使用它自己的英特尔 HD 4000 视频驱动程序。我使用这个驱动程序是因为它与我的笔记本电脑键盘(F5、F6 等)上的热键交互。我在我的第二台戴尔笔记本电脑上测试了这个编译的 JAR 文件,一切正常!伟大的!感谢您测试和帮助我,我认为这不是我的本地问题!
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 2015-02-11
  • 2013-02-02
相关资源
最近更新 更多