JTextFieldでのBeep音の設定を変更する
Total: 5258
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTextField
などで、Delete、Back Spaceキーを押した時に鳴らすBeep
音の設定を変更します。
Screenshot
Advertisement
サンプルコード
String key = DefaultEditorKit.deletePrevCharAction; // delete-previous
Action deletePreviousAction = am.get(key);
am.put(key, new TextAction(key) {
// @see javax/swing/text/DefaultEditorKit.java DeletePrevCharAction
@Override public void actionPerformed(ActionEvent e) {
JTextComponent target = getTextComponent(e);
if (target != null && target.isEditable()) {
Caret caret = target.getCaret();
int dot = caret.getDot();
int mark = caret.getMark();
if (dot == 0 && mark == 0) {
return;
}
}
deletePreviousAction.actionPerformed(e);
}
});
key = DefaultEditorKit.deleteNextCharAction; // delete-next
Action deleteNextAction = am.get(key);
am.put(key, new TextAction(key) {
// @see javax/swing/text/DefaultEditorKit.java DeleteNextCharAction
@Override public void actionPerformed(ActionEvent e) {
JTextComponent target = getTextComponent(e);
if (target != null && target.isEditable()) {
Document doc = target.getDocument();
Caret caret = target.getCaret();
int dot = caret.getDot();
int mark = caret.getMark();
if (dot == mark && doc.getLength() == dot) {
return;
}
}
deleteNextAction.actionPerformed(e);
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTextField
のBeep
音の設定を以下2
点変更して動作テストを行っています。
TextAction(DefaultEditorKit.deleteNextCharAction)#actionPerformed(ActionEvent)
メソッドなどをオーバーライドしてDeleteキーやBack Spaceキーで文字の削除がなくてもBeep
音を鳴らさないように変更したアクションをActionMap
に設定5
文字以上入力できないように制限し、超える場合はBeep
音を鳴らすDocumentFilter
を作成してAbstractDocument#setDocumentFilter(DocumentFilter)
で設定