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) { } }