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
12
13
14 public class SilentDeleteTextAction extends TextAction {
15
16 private final transient Action deleteAction;
17
18 public SilentDeleteTextAction(String name, Action deleteAction) {
19 super(name);
20 this.deleteAction = deleteAction;
21 }
22
23 @Override
24 public void actionPerformed(ActionEvent e) {
25 JTextComponent target = this.getTextComponent(e);
26 if (Objects.nonNull(target) && target.isEditable()) {
27 var caret = target.getCaret();
28 int dot = caret.getDot();
29 int mark = caret.getMark();
30
31 if (DefaultEditorKit.deletePrevCharAction.equals(this.getValue(Action.NAME))) {
32
33 if (dot == 0 && mark == 0) {
34 return;
35 }
36 } else {
37
38 var doc = target.getDocument();
39 if (dot == mark && doc.getLength() == dot) {
40 return;
41 }
42 }
43 }
44
45 this.deleteAction.actionPerformed(e);
46 }
47 }