JTextFieldは、一行のテキスト(文字列)の編集を行うコンポーネント。
(固定で表示するだけならJLabel、複数行の編集を行うならJTextAreaやJTextPane)
|
|
JTextFieldは、デフォルトでは左揃え。中央揃えや右揃えにするには以下のようにする。
import javax.swing.JTextField;
JTextField tf = new JTextField(); tf.setHorizontalAlignment(JTextField.RIGHT);
JTextFieldのデフォルトでは、アウンドゥー・リドゥー(Ctrl+ZやCtrl+Yによる入力のやり直し)機能は備わっていない。
これはUndoManagerを登録すれば出来るようになる。
UndoManager機能を備えたJTextFieldは以下のようになる。
import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JTextField; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.text.Document; import javax.swing.undo.UndoManager;
public class UndoTextField extends JTextField implements UndoableEditListener, KeyListener {
private static final long serialVersionUID = -3702841774360223359L;
protected UndoManager um = new UndoManager();
/** コンストラクター */
public UndoTextField() {
// 編集リスナーの登録
Document doc = getDocument();
doc.addUndoableEditListener(this);
// UNDO/REDOを実行するキーの登録
addKeyListener(this);
}
/** UNDO情報をクリアする */
public void clearUndoEdit() {
um.discardAllEdits();
}
// UndoableEditListener
public void undoableEditHappened(UndoableEditEvent e) {
// 行われた編集(文字の追加や削除)をUndoManagerに登録
um.addEdit(e.getEdit());
}
// KeyListener
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_Z: // CTRL+Zのとき、UNDO実行
if (e.isControlDown() && um.canUndo()) {
um.undo();
e.consume();
}
break;
case KeyEvent.VK_Y: // CTRL+Yのとき、REDO実行
if (e.isControlDown() && um.canRedo()) {
um.redo();
e.consume();
}
break;
}
}
public void keyReleased(KeyEvent e) {
}
}