package lecture.swing;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* テキスフィールドのサンプル
* 入力文字数を制限する
* 注、JTextFieldには、直接的に入力文字数を制限する方法はない
* イベントを取得して自力でやる必要がある
*
* このページは割合と参照が多く、みんな苦労しているようなので、チェック処理の部品を作成した。
* https://blogs.yahoo.co.jp/artery2020/41540074.html
*/
class TextFieldTest extends JFrame implements KeyListener {
private static final int MAXLEN = 10;
public static void main(String[] args) {
new TextFieldTest();
}
private TextFieldTest() {
super("TextField");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
String string = "テキストフィールド";
JTextField textField = new JTextField(string);
textField.addKeyListener(this);
panel.add(textField);
add(panel);
pack();
setVisible(true);
}
@Override
public void keyPressed(KeyEvent ev) {
// 処理なし
}
/**
* 入力文字数をチェックする
* 以下は、追記
* String#length()では文字数が取得される。
* テーブルに格納するために、バイト数でチェックを行いたい場合は、
* 目的の文字コードを指定してgetBytesメソッドでbyte[]に変換し、そのサイズでチェックすればよい
* バイト数を計算するサンプルは以下を参照。
* Java 文字列のバイト数を計算する.
* http://blogs.yahoo.co.jp/artery2020/40376366.html
*
*/
@Override
public void keyReleased(KeyEvent ev) {
JTextField field = (JTextField)ev.getSource();
String str = field.getText();
if (str.length() >= MAXLEN) {
str = str.substring(0,MAXLEN);
field.setText(str);
}
}
@Override
public void keyTyped(KeyEvent ev) {
// 処理なし
}
}