01: package snow.sortabletable;
02:
03: import java.awt.*;
04: import java.awt.event.*;
05: import javax.swing.*;
06: import javax.swing.event.*;
07:
08: /** a small utility to add a search panel to a sortable table viewer
09: */
10: public class SearchPanel extends JPanel {
11: SortableTableModel stm;
12:
13: final protected JTextField searchFT = new JTextField(6);
14: final protected JTextField searchFT2 = new JTextField(6);
15: final protected JCheckBox useRegExCB = new JCheckBox("RegEx", false);
16:
17: /** @param secondSearch if true, two fields are shown, alowing an AND search
18: @param searchLabelText is normally "Search: "
19: */
20: public SearchPanel(final String searchLabelText,
21: final Icon searchIcon, final SortableTableModel stm,
22: final boolean secondSearch, final boolean allowRegEx) {
23: super (new FlowLayout(FlowLayout.LEFT));
24: this .stm = stm;
25:
26: // Components
27: //
28: add(new JLabel(searchLabelText, searchIcon, JLabel.LEFT));
29: add(searchFT);
30:
31: if (secondSearch) {
32: add(new JLabel(" & "));
33: add(searchFT2);
34: }
35:
36: if (allowRegEx) {
37: add(useRegExCB);
38: }
39:
40: // key listener
41: //
42: KeyAdapter kad = new KeyAdapter() {
43: @Override
44: public void keyReleased(KeyEvent ee) {
45: doSearch();
46: }
47: };
48:
49: searchFT.addKeyListener(kad);
50: searchFT2.addKeyListener(kad);
51:
52: // focus behaviour
53: //
54:
55: searchFT.addFocusListener(new FocusAdapter() {
56: @Override
57: public void focusGained(FocusEvent e) {
58: searchFT.selectAll();
59: }
60: });
61: searchFT2.addFocusListener(new FocusAdapter() {
62: @Override
63: public void focusGained(FocusEvent e) {
64: searchFT2.selectAll();
65: }
66: });
67:
68: // CTRL+F mapping
69: //
70:
71: this .registerKeyboardAction(new ActionListener() {
72: public void actionPerformed(ActionEvent e) {
73: searchFT.requestFocus();
74: }
75: }, KeyStroke.getKeyStroke(KeyEvent.VK_F,
76: KeyEvent.CTRL_DOWN_MASK),
77: JComponent.WHEN_IN_FOCUSED_WINDOW); // ### Maybe pass the parent as argument reference and register actions on it.
78: // It makes sense if several internal frames have searches...
79:
80: }
81:
82: public void doSearch() {
83: stm.search(searchFT.getText(), searchFT2.getText(), useRegExCB
84: .isSelected());
85: }
86:
87: public void setSearchText(String t1, String t2) {
88: searchFT.setText(t1);
89: searchFT2.setText(t2);
90: }
91:
92: }
|