gpt4 book ai didi

java - 如何使某个 JFrame 具有与其他 JFrame 不同的 LAF?

转载 作者:行者123 更新时间:2023-12-01 11:02:59 24 4
gpt4 key购买 nike

假设我有 2 个 JFrame。将 JFrame 设置为可见后,如果不先将可见性设置为隐藏和正常,则似乎无法更改 LAF。这意味着闪烁,并且 JFrame 跳到顶部。

否则,你会得到这个:

(Metal 和 Ubuntu 系统 LAF 的某种混合)

此外,重新绘制似乎没有帮助。

现在,假设第一个 JFrame 是使用 Metal LAF 制作的。显示后,LAF 变为系统LAF。然后第二个出现。现在,第一个被这件有趣的事情影响了。第二个还可以。为什么会这样呢?这是我的代码:

public static void main(String[] args) throws ClassNotFoundException, UnsupportedLookAndFeelException, InstantiationException, IllegalAccessException {
JFrame first = new JFrame("First");
first.add(new JButton("Click me, I look funny"));
first.setPreferredSize(new Dimension(100, 100));
first.pack();
first.setVisible(true);

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

first.repaint();

JFrame second = new JFrame("Second");
second.add(new JButton("Click"));
second.setPreferredSize(new Dimension(100, 100));
second.pack();
second.setVisible(true);
second.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

那么如何让新的 LAF 只影响 1 个 JFrame?

或者 LAF 是全局的,不能仅应用于 1 个 JFrame?

最佳答案

在我看来,它们好像是在创建 JFrame 时应用的,因此只需在创建下一个 JFrame 之前更改设置即可。

例如:

UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
JFrame first = new JFrame("First");
first.add(new JButton("Click me, I look funny"));
first.setPreferredSize(new Dimension(300, 100));
first.pack();
first.setVisible(true);

UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");

JFrame second = new JFrame("Second");
second.add(new JButton("Click"));
second.setPreferredSize(new Dimension(100, 100));
second.setLocation(300, 0);
second.pack();
second.setVisible(true);
second.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

制作:

enter image description here

关于java - 如何使某个 JFrame 具有与其他 JFrame 不同的 LAF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33199149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com