/
MainPanel.java
143 lines (129 loc) · 5.66 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// -*- mode:java; encoding:utf-8 -*-
// vim:set fileencoding=utf-8:
// @homepage@
package example;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import java.util.Set;
import javax.swing.*;
public final class MainPanel extends JPanel {
private static final String HELP1 = "FORWARD_TRAVERSAL_KEYS: TAB, RIGHT, DOWN\n";
private static final String HELP2 = "BACKWARD_TRAVERSAL_KEYS: SHIFT+TAB, LEFT, UP";
private MainPanel() {
super(new BorderLayout());
JTextArea info = new JTextArea(HELP1 + HELP2 + "\n----\n");
info.setEditable(false);
JButton button = new JButton("showOptionDialog");
button.addActionListener(e -> {
JComponent c = (JComponent) e.getSource();
int retValue = JOptionPane.showConfirmDialog(c.getRootPane(), HELP1 + HELP2);
if (retValue == JOptionPane.YES_OPTION) {
info.append("YES_OPTION\n");
} else if (retValue == JOptionPane.NO_OPTION) {
info.append("NO_OPTION\n");
} else if (retValue == JOptionPane.CANCEL_OPTION) {
info.append("CANCEL_OPTION\n");
}
});
EventQueue.invokeLater(() -> getRootPane().setDefaultButton(button));
Box box = Box.createHorizontalBox();
box.add(Box.createHorizontalGlue());
box.add(new JButton("111"));
box.add(new JButton("222"));
box.add(button);
box.add(new JButton("333"));
KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
int ftk = KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS;
// Set<AWTKeyStroke> forwardKeys = new HashSet<>(frame.getFocusTraversalKeys(ftk));
Set<AWTKeyStroke> forwardKeys = new HashSet<>(focusManager.getDefaultFocusTraversalKeys(ftk));
forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0));
forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
// frame.setFocusTraversalKeys(ftk, forwardKeys);
focusManager.setDefaultFocusTraversalKeys(ftk, forwardKeys);
int btk = KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS;
// Set<AWTKeyStroke> backwardKeys = new HashSet<>(frame.getFocusTraversalKeys(btk));
Set<AWTKeyStroke> backwardKeys = new HashSet<>(focusManager.getDefaultFocusTraversalKeys(btk));
backwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0));
backwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
// frame.setFocusTraversalKeys(btk, backwardKeys);
focusManager.setDefaultFocusTraversalKeys(btk, backwardKeys);
setFocusCycleRoot(true);
setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() {
@Override protected boolean accept(Component c) {
// return !Objects.equals(c, textarea) && super.accept(c);
return !(c instanceof JTextArea) && super.accept(c);
}
@Override public Component getDefaultComponent(Container container) {
// return button;
return getRootPane().getDefaultButton();
}
});
add(new JScrollPane(info));
add(box, BorderLayout.SOUTH);
setPreferredSize(new Dimension(320, 240));
}
// // %JAVA_HOME%/src_b23/javax/swing/JOptionPane.java
// public static int showOptionDialog(
// Component parent, Object message, String title, int optionType, int messageType,
// Icon icon, Object[] options, Object initialValue) throws HeadlessException {
// JOptionPane pane = new JOptionPane(
// message, messageType, optionType, icon, options, initialValue);
// pane.setInitialValue(initialValue);
// Component p = parent == null ? JOptionPane.getRootFrame() : parent;
// pane.setComponentOrientation(p.getComponentOrientation());
//
// // int style = JOptionPane.styleFromMessageType(messageType);
// // JDialog dialog = pane.createDialog(parent, title, style);
// JDialog dialog = pane.createDialog(parent, title);
//
// Set<AWTKeyStroke> forwardKeys = new HashSet<>(dialog.getFocusTraversalKeys(ftk));
// forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0));
// forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
// dialog.setFocusTraversalKeys(ftk, forwardKeys);
//
// Set<AWTKeyStroke> backwardKeys = new HashSet<>(dialog.getFocusTraversalKeys(btk));
// backwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0));
// backwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
// dialog.setFocusTraversalKeys(btk, backwardKeys);
//
// pane.selectInitialValue();
// // dialog.show();
// dialog.setVisible(true);
// dialog.dispose();
//
// Object selectedValue = pane.getValue();
// if (selectedValue == null)
// return JOptionPane.CLOSED_OPTION;
// if (options == null) {
// if (selectedValue instanceof Integer)
// return ((Integer) selectedValue).intValue();
// return JOptionPane.CLOSED_OPTION;
// }
// for (int counter = 0, maxCounter = options.length;
// counter < maxCounter; counter++) {
// if (options[counter].equals(selectedValue))
// return counter;
// }
// return JOptionPane.CLOSED_OPTION;
// }
public static void main(String[] args) {
EventQueue.invokeLater(MainPanel::createAndShowGui);
}
private static void createAndShowGui() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} 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);
}
}