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
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
37 if (dot == 0 && mark == 0) {
38 return;
39 }
40 } else {
41
42
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 }