-
Notifications
You must be signed in to change notification settings - Fork 156
/
MainPanel.java
104 lines (92 loc) · 3.27 KB
/
MainPanel.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// -*- mode:java; encoding:utf-8 -*-
// vim:set fileencoding=utf-8:
// @homepage@
package example;
import java.awt.*;
import javax.swing.*;
public final class MainPanel extends JPanel {
private MainPanel() {
super(new BorderLayout());
JMenuBar mb = new JMenuBar();
mb.add(LookAndFeelUtils.createLookAndFeelMenu());
EventQueue.invokeLater(() -> getRootPane().setJMenuBar(mb));
add(new JScrollPane(new JTree()));
setPreferredSize(new Dimension(320, 240));
}
public static void main(String[] args) {
EventQueue.invokeLater(MainPanel::createAndShowGui);
}
private static void createAndShowGui() {
try {
// JDK 1.7.0 and later:
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
// // JDK 1.6.0_10
// for (UIManager.LookAndFeelInfo laf: UIManager.getInstalledLookAndFeels()) {
// if ("Nimbus".equals(laf.getName())) {
// UIManager.setLookAndFeel(laf.getClassName());
// }
// }
} catch (UnsupportedLookAndFeelException ignored) {
Toolkit.getDefaultToolkit().beep();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
ex.printStackTrace();
return;
}
JFrame frame = new JFrame("@title@");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(new MainPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
// @see SwingSet3/src/com/sun/swingset3/SwingSet3.java
final class LookAndFeelUtils {
private static String lookAndFeel = UIManager.getLookAndFeel().getClass().getName();
private LookAndFeelUtils() {
/* Singleton */
}
public static JMenu createLookAndFeelMenu() {
JMenu menu = new JMenu("LookAndFeel");
ButtonGroup buttonGroup = new ButtonGroup();
for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
AbstractButton b = makeButton(info);
initLookAndFeelAction(info, b);
menu.add(b);
buttonGroup.add(b);
}
return menu;
}
private static AbstractButton makeButton(UIManager.LookAndFeelInfo info) {
boolean selected = info.getClassName().equals(lookAndFeel);
return new JRadioButtonMenuItem(info.getName(), selected);
}
public static void initLookAndFeelAction(UIManager.LookAndFeelInfo info, AbstractButton b) {
String cmd = info.getClassName();
b.setText(info.getName());
b.setActionCommand(cmd);
b.setHideActionText(true);
b.addActionListener(e -> setLookAndFeel(cmd));
}
private static void setLookAndFeel(String newLookAndFeel) {
String oldLookAndFeel = lookAndFeel;
if (!oldLookAndFeel.equals(newLookAndFeel)) {
try {
UIManager.setLookAndFeel(newLookAndFeel);
lookAndFeel = newLookAndFeel;
} catch (UnsupportedLookAndFeelException ignored) {
Toolkit.getDefaultToolkit().beep();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
ex.printStackTrace();
return;
}
updateLookAndFeel();
// firePropertyChange("lookAndFeel", oldLookAndFeel, newLookAndFeel);
}
}
private static void updateLookAndFeel() {
for (Window window : Window.getWindows()) {
SwingUtilities.updateComponentTreeUI(window);
}
}
}