如何使某个 JFrame 具有与其他 JFrame 不同的 LAF?
How can I make a certain JFrame have a different LAF from other JFrames?
假设我有 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);
出品:
假设我有 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);
出品: