TITLE:JTextFieldでのBeep音の設定を変更する
Posted by at 2012-10-01

JTextFieldでのBeep音の設定を変更する

`JTextFieldなどで、DELETEBACK_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などで、DeleteBack Spaceキーを押した時に鳴らすBeep音の設定を変更します。 image: https://lh6.googleusercontent.com/-zIUmkF2C9FA/UGkqdcWDLVI/AAAAAAAABTk/F4nun0GDLZc/s800/DeleteKeyBeep.png

概要

JTextFieldなどで、DeleteBack Spaceキーを押した時に鳴らすBeep音の設定を変更します。
DeleteKeyBeep.png

サンプルコード

サンプルコード

#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`音の設定を変更しています。

解説

上記のサンプルでは、JTextFieldBeep音の設定を以下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)で設定

参考リンク

参考リンク

コメント

コメント