Swing/DeleteKeyBeep のバックアップの現在との差分(No.4)
TITLE:JTextFieldでのBeep音の設定を変更する
Posted by aterai at 2012-10-01
JTextFieldでのBeep音の設定を変更する
`JTextField
などで、
DELETE
、
BACK_SPACE
キーを押した時に鳴らす
Beep
`音の設定を変更します。
- category: swing folder: DeleteKeyBeep title: JTextFieldでのBeep音の設定を変更する tags: [JTextField, Sound, ActionMap, DocumentFilter] author: aterai pubdate: 2012-10-01T14:42:41+09:00 description: JTextFieldなどで、Delete、Back Spaceキーを押した時に鳴らすBeep音の設定を変更します。 image:
概要
JTextField
などで、Delete、Back Spaceキーを押した時に鳴らすBeep
音の設定を変更します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
サンプルコード
#spandel
String key = "delete-previous";
#spanend
#spandel
final Action deletePreviousAction = am.get(key);
#spanend
#spandel
am.put(key, new TextAction(DefaultEditorKit.deletePrevCharAction) {
#spanend
//@see javax/swing/text/DefaultEditorKit.java DeletePrevCharAction
#spanadd
String key = DefaultEditorKit.deletePrevCharAction; // delete-previous
#spanend
#spanadd
Action deletePreviousAction = am.get(key);
#spanend
#spanadd
am.put(key, new TextAction(key) {
#spanend
// @see javax/swing/text/DefaultEditorKit.java DeletePrevCharAction
@Override public void actionPerformed(ActionEvent e) {
JTextComponent target = getTextComponent(e);
if(target != null && target.isEditable()) {
if (target != null && target.isEditable()) {
Caret caret = target.getCaret();
int dot = caret.getDot();
int mark = caret.getMark();
if(dot==0 && mark==0) {
if (dot == 0 && mark == 0) {
return;
}
}
deletePreviousAction.actionPerformed(e);
}
});
#spandel
key = "delete-next";
#spanend
#spandel
final Action deleteNextAction = am.get(key);
#spanend
#spandel
am.put(key, new TextAction(DefaultEditorKit.deleteNextCharAction) {
#spanend
//@see javax/swing/text/DefaultEditorKit.java DeleteNextCharAction
#spanadd
key = DefaultEditorKit.deleteNextCharAction; // delete-next
#spanend
#spanadd
Action deleteNextAction = am.get(key);
#spanend
#spanadd
am.put(key, new TextAction(key) {
#spanend
// @see javax/swing/text/DefaultEditorKit.java DeleteNextCharAction
@Override public void actionPerformed(ActionEvent e) {
JTextComponent target = getTextComponent(e);
if(target != null && target.isEditable()) {
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) {
if (dot == mark && doc.getLength() == dot) {
return;
}
}
deleteNextAction.actionPerformed(e);
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、以下の二点を変更して、`Beep
`音の設定を変更しています。
解説
上記のサンプルでは、JTextField
のBeep
音の設定を以下2
点変更して動作テストを行っています。
- `
TextAction(DefaultEditorKit.deleteNextCharAction)#actionPerformed(ActionEvent)
などをオーバーライドして、
DELETE
キーや
BACK_SPACE
キーで文字の削除がなくても、
Beep
音を鳴らさないように変更したアクションを
ActionMap
`に設定 - 5文字以上入力できないように制限し、超える場合は`
Beep
音を鳴らす
DocumentFilter
を作成して、
AbstractDocument#setDocumentFilter(DocumentFilter)
`で設定 -
TextAction(DefaultEditorKit.deleteNextCharAction)#actionPerformed(ActionEvent)
メソッドなどをオーバーライドしてDeleteキーやBack Spaceキーで文字の削除がなくてもBeep
音を鳴らさないように変更したアクションをActionMap
に設定 -
5
文字以上入力できないように制限し、超える場合はBeep
音を鳴らすDocumentFilter
を作成してAbstractDocument#setDocumentFilter(DocumentFilter)
で設定