java - JInternalFrame 在 Netbeans 7.1.2 中不使用 JFrame L&F

标签 java swing look-and-feel jinternalframe nimbus

我正在使用 Netbeans 创建一个 MDI 应用程序,在外观设置为 Nimbus 的情况下,一切都按预期运行良好。

每当我运行应用程序时,JFrame 及其工具栏都会使用指定的 L&F (Nimbus),但内部框架使用跨平台(Metal)L&F,使应用程序看起来很破旧。

我希望内部框架使用与 JFrame 相同的 L&F。请问我该如何解决这个问题?

我尝试调用 JFrame.setdefaultlookandfeeldecorated(true)SwingUtilities.updatecomponenttreeui(frame) 但它们没有解决问题。

最佳答案

Anytime I run the application, the JFrame and its toolbars use the specified L&F (Nimbus) but the Internal Frames use the cross platform (Metal) L&F making the application look shabby.

enter image description here

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;

public class TestInternalFrame {

    public TestInternalFrame() {
        final JInternalFrame internal = new JInternalFrame("test");
        final JInternalFrame hidden = new JInternalFrame("test");
        hidden.setBounds(1000, 1000, 1, 1);
        hidden.setVisible(true);
        internal.setVisible(true);
        internal.setBounds(0, 0, 100, 100);
        JDesktopPane pane = new JDesktopPane();
        pane.add(internal);
        pane.add(hidden);
        pane.setPreferredSize(new Dimension(10000, 10000));
        final JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(new JScrollPane(pane,
                JScrollPane.VERTICAL_SCROLLBAR_NEVER,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
        /*frame.getContentPane().add(new JButton(new AbstractAction("Show blocked dialog") {

        private static final long serialVersionUID = 1L;

        @Override
        public void actionPerformed(ActionEvent e) {
        EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
        JOptionPane.showInternalMessageDialog(hidden, "Hi 2!");
        }
        });
        JOptionPane.showInternalMessageDialog(internal, "Hi 1!");
        }
        }), BorderLayout.PAGE_END);*/
        frame.setPreferredSize(new Dimension(400, 300));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                System.out.println(info.getName());
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (UnsupportedLookAndFeelException e) {
            // handle exception
        } catch (ClassNotFoundException e) {
            // handle exception
        } catch (InstantiationException e) {
            // handle exception
        } catch (IllegalAccessException e) {
            // handle exception
        }

        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                TestInternalFrame tif = new TestInternalFrame();
            }
        });
    }
}

关于java - JInternalFrame 在 Netbeans 7.1.2 中不使用 JFrame L&F,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642099/

相关文章:

java - OSGI 环境中的 Spring 应用程序

java - 算法的时间复杂度 : How to decide which algorithm after calculated the time

java - ASM 在解释器上合并两个值对象

java - 重新绘制 - 立即绘制和删除

java 8 Stream - 如何在映射后获取原始对象引用

java - 有没有更好的方法来添加大量带有附加到数组的独特图像的 JPanel?

java - 如何修复 JTextArea 滚动到底部?

java - 跨 Web 应用程序处理标准化外观和安全性的最佳方式?

java - J树 : modify apperance regardless of L&F

java - 拖动JToolBar时如何保持Metal L&F