View Javadoc
1   package com.jsql.view.swing.text.action;
2   
3   import javax.swing.*;
4   import javax.swing.text.DefaultEditorKit;
5   import javax.swing.text.JTextComponent;
6   import javax.swing.text.TextAction;
7   import java.awt.event.ActionEvent;
8   import java.util.Objects;
9   
10  /**
11   * Action to cancel Beep sound when deleting last character.
12   * Used on TextField.
13   */
14  public class SilentDeleteTextAction extends TextAction {
15      
16      private final transient Action deleteAction;
17      
18      public SilentDeleteTextAction(String name, Action deleteAction) {
19          
20          super(name);
21          this.deleteAction = deleteAction;
22      }
23      
24      @Override
25      public void actionPerformed(ActionEvent e) {
26          
27          JTextComponent target = this.getTextComponent(e);
28          
29          if (Objects.nonNull(target) && target.isEditable()) {
30              
31              var caret = target.getCaret();
32              int dot = caret.getDot();
33              int mark = caret.getMark();
34              
35              if (DefaultEditorKit.deletePrevCharAction.equals(this.getValue(Action.NAME))) {
36                  // @see javax/swing/text/DefaultEditorKit.java DeletePrevCharAction
37                  if (dot == 0 && mark == 0) {
38                      return;
39                  }
40              } else {
41                  
42                  // @see javax/swing/text/DefaultEditorKit.java DeleteNextCharAction
43                  var doc = target.getDocument();
44                  
45                  if (dot == mark && doc.getLength() == dot) {
46                      return;
47                  }
48              }
49          }
50          
51          this.deleteAction.actionPerformed(e);
52      }
53  }