/*
Core SWING Advanced Programming
By Kim Topley
ISBN: 0 13 083292 8
Publisher: Prentice Hall
*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Action;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.text.Document;
import javax.swing.text.Keymap;
public class PassiveTextField2 extends JTextField {
public PassiveTextField2() {
this(null, null, 0);
}
public PassiveTextField2(String text) {
this(null, text, 0);
}
public PassiveTextField2(int columns) {
this(null, null, columns);
}
public PassiveTextField2(String text, int columns) {
this(null, text, columns);
}
public PassiveTextField2(Document doc, String text, int columns) {
super(doc, text, columns);
}
public void setKeymap(Keymap map) {
if (map == null) {
// Uninstalling keymap.
super.setKeymap(null);
sharedKeymap = null;
return;
}
if (getKeymap() == null) {
if (sharedKeymap == null) {
// Initial keymap, or first
// keymap after L&F switch.
// Generate a new keymap
sharedKeymap = addKeymap(null, map.getResolveParent());
KeyStroke[] strokes = map.getBoundKeyStrokes();
for (int i = 0; i < strokes.length; i++) {
Action a = map.getAction(strokes[i]);
if (a.getValue(Action.NAME) == JTextField.notifyAction) {
continue;
}
sharedKeymap.addActionForKeyStroke(strokes[i], a);
}
}
map = sharedKeymap;
}
super.setKeymap(map);
}
protected static Keymap sharedKeymap;
// Test method
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception evt) {}
JFrame f = new JFrame("Passive Text Field");
f.getContentPane().setLayout(
new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS));
final PassiveTextField2 ptf = new PassiveTextField2(32);
JTextField tf = new JTextField(32);
JPanel p = new JPanel();
JButton b = new JButton("OK");
p.add(b);
f.getContentPane().add(ptf);
f.getContentPane().add(tf);
f.getContentPane().add(p);
SwingUtilities.updateComponentTreeUI(f);
ActionListener l = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out.println("Action event from a text field");
}
};
ptf.addActionListener(l);
tf.addActionListener(l);
// Make the button the default button
f.getRootPane().setDefaultButton(b);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out.println("Content of text field: <" + ptf.getText()
+ ">");
}
});
f.pack();
f.setVisible(true);
}
}
|