summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf/in/inf/java2/aufgabe04/TextFieldWithContextMenu.java
blob: db1f2a0465f3097f94eaf033ad386a8f3c9cbc9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/**
 * File for the TextFieldWithContextMenu.
 */

package de.fhswf.in.inf.java2.aufgabe04;

import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextField;
import javafx.scene.input.Clipboard;

/**
 * A TextField with a ContextMenu.
 *
 * @author Stefan Suhren
 * @version 1.0
 */
public class TextFieldWithContextMenu extends TextField
{  
   private MenuItem undo = new MenuItem("Rückgängig");
   private MenuItem cut = new MenuItem("Ausschneiden");
   private MenuItem copy = new MenuItem("Kopieren");
   private MenuItem paste = new MenuItem("Einfügen");
   private MenuItem delete = new MenuItem("Löschen");
   private MenuItem selectAll = new MenuItem("Alles Markieren");
   
   private ContextMenu contextMenu;

   /**
    * Build the ContextMenu for the TextField.
    *
    */
   public TextFieldWithContextMenu()
   {  
      undo.setOnAction(e -> {
            undo();
         });

      cut.setOnAction(e -> {
            cut();
         });
      
      copy.setOnAction(e -> {
            copy();
         });
      
      paste.setOnAction(e -> {
            paste();
         });
      
      delete.setOnAction(e -> {
            replaceSelection("");
         });

      selectAll.setOnAction(e -> {
            selectAll();
         });

      contextMenu = new ContextMenu(undo, cut, copy, paste, delete,
            selectAll);
      
      setContextMenu(contextMenu);
      
      contextMenu.setOnShowing(e -> {
            getContextMenu().getItems().forEach(f -> {
                  f.setDisable(true);
               });
            
            undo.setDisable(!isUndoable());
            paste.setDisable(Clipboard.getSystemClipboard().getString() == null);
            selectAll.setDisable(getLength() <= 0 || getSelection().getLength() >= getLength());
            
            if (getSelection().getLength() > 0)
            {
               copy.setDisable(false);
               cut.setDisable(false);
               delete.setDisable(false);
            }
         });
   }

}