S-JIS[2009-03-15] 変更履歴

JTextField(Swing)

JTextFieldは、一行のテキスト(文字列)の編集を行うコンポーネント。
(固定で表示するだけならJLabel、複数行の編集を行うならJTextAreaやJTextPane


横位置指定

JTextFieldは、デフォルトでは左揃え。中央揃えや右揃えにするには以下のようにする。

import javax.swing.JTextField;
		JTextField tf = new JTextField();
		tf.setHorizontalAlignment(JTextField.RIGHT);

UNDO・REDO

JTextFieldのデフォルトでは、アウンドゥー・リドゥー(Ctrl+ZCtrl+Yによる入力のやり直し)機能は備わっていない。
これはUndoManagerを登録すれば出来るようになる。

UndoManager機能を備えたJTextFieldは以下のようになる。

UndoTextField.java:

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

UndoTextField


Swing目次へ戻る / Java目次へ戻る / 自作Swingクラスへ行く
メールの送信先:ひしだま