更改Java Swing JFrame

时间:2018-04-20 09:23:36

标签: java swing jframe look-and-feel

我试图改变 JFrame 的装饰风格。我试过以下代码。

//...
static void main(String[] args) {
    EventQueue.invokeLater(()-> {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("This is Title");
        frame.setSize(500, 600);
        frame.setVisible(true);
    });
}

它会更改 JFrame 的装饰风格,但只有在外观设置为 Metal 时才有效。如果在代码中的代码中某处某处改变了外观,则代码为:

for (UIManager.LookAndFeelInfo laf: UIManager.getInstalledLookAndFeels()) {
    if ("Nimbus".equals(laf.getName()) {
        UIManager.setLookAndFeel(laf.getClassName());
        SwingUtilities.updateComponentTreeUI(frame);
    }
}

然后,外观改变了,但 frame 的装饰消失了。因此,我无法移动,调整大小,最大化,最小化和关闭frame

  

问题1:

     

有可能解决这个问题吗?

     

问题2:

     

我可以更改 JFrame 的装饰风格   看起来像 Visual Studio 标题栏?

1 个答案:

答案 0 :(得分:0)

您可以将JFrame实例本身设置为未修饰:

static void main(String[] args) {
    EventQueue.invokeLater(()-> {
        JFrame frame = new JFrame("This is Title");
        frame.setUndecorated(true);
        frame.setSize(500, 600);
        frame.setVisible(true);
    });
}

如果你想要以不同的方式装饰(而不是未修饰),你将不得不编写自己的LookAndFeel。

或尝试使用" SystemLookAndFeel" - 这大致类似于您正在运行的操作系统。如果是Windows,它最终可能看起来有点像Visual Studio ......