-
Notifications
You must be signed in to change notification settings - Fork 156
/
MainPanel.java
131 lines (118 loc) · 4.34 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
// -*- mode:java; encoding:utf-8 -*-
// vim:set fileencoding=utf-8:
// @homepage@
package example;
import java.awt.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public final class MainPanel extends JPanel {
private static final String TEXT = "The quick brown fox jumps over the lazy dog.";
private MainPanel() {
super(new BorderLayout());
Box box = Box.createVerticalBox();
box.setBorder(BorderFactory.createEmptyBorder(10, 30, 10, 30));
box.add(makeExpandingTextArea1());
box.add(Box.createVerticalStrut(10));
box.add(makeExpandingTextArea2());
add(box, BorderLayout.NORTH);
add(new JButton("focus test"), BorderLayout.SOUTH);
setPreferredSize(new Dimension(320, 240));
}
private static Component makeExpandingTextArea1() {
JPanel p = new JPanel(new BorderLayout());
JTextArea textArea = new JTextArea(TEXT, 1, 10);
textArea.setLineWrap(true);
textArea.addFocusListener(new FocusListener() {
@Override public void focusGained(FocusEvent e) {
JTextArea ta = (JTextArea) e.getComponent();
ta.setRows(3);
p.revalidate();
}
@Override public void focusLost(FocusEvent e) {
JTextArea ta = (JTextArea) e.getComponent();
ta.setRows(1);
p.revalidate();
}
});
JScrollPane scroll = new JScrollPane(textArea);
// scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
p.add(scroll, BorderLayout.NORTH);
return p;
}
private static Component makeExpandingTextArea2() {
CardLayout cardLayout = new CardLayout();
JPanel cp = new JPanel(cardLayout);
JTextArea textArea = new JTextArea(TEXT, 3, 10) {
@Override public void updateUI() {
super.updateUI();
setLineWrap(true);
setWrapStyleWord(true);
setMargin(new Insets(1, 1, 1, 1));
}
};
JLabel textField = new JLabel(TEXT) {
@Override public void updateUI() {
super.updateUI();
setOpaque(true);
setFocusable(true);
setBackground(UIManager.getColor("TextField.background"));
setForeground(UIManager.getColor("TextField.foreground"));
setBorder(BorderFactory.createCompoundBorder(
UIManager.getBorder("TextField.border"),
BorderFactory.createEmptyBorder(1, 1, 1, 1)));
setFont(UIManager.getFont("TextArea.font"));
}
};
textArea.addFocusListener(new FocusAdapter() {
@Override public void focusLost(FocusEvent e) {
String text = textArea.getText();
textField.setText(text.isEmpty() ? " " : text);
cardLayout.show(cp, "TextField");
}
});
textField.addFocusListener(new FocusAdapter() {
@Override public void focusGained(FocusEvent e) {
cardLayout.show(cp, "TextArea");
textArea.requestFocusInWindow();
}
});
textField.addMouseListener(new MouseAdapter() {
@Override public void mousePressed(MouseEvent e) {
cardLayout.show(cp, "TextArea");
textArea.requestFocusInWindow();
}
});
JPanel panel = new JPanel(new BorderLayout());
panel.add(textField, BorderLayout.NORTH);
JScrollPane scroll = new JScrollPane(textArea);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
cp.add(panel, "TextField");
cp.add(scroll, "TextArea");
return cp;
}
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);
}
}