package javacodebook.gui.keystroke; import javax.swing.*; import java.awt.event.*; import java.awt.*; /** * Die einzelnen Buttons können über CTRL + A für "Hinzufügen" und CTRL + D * für "Löschen" aufgerufen werden. Ist einer der Buttons im Focus, * funktioniert das Auslösen auch über ENTER. */ public class KeyStrokes extends Frame { private Button addButton = new Button("Hinzufügen"); private Button deleteButton = new Button("Löschen"); private TextField field = new TextField(15); private Panel north = new Panel(); private TextArea editor = new TextArea(9,20); /** * Konstruktor von KeyStrokes. */ public KeyStrokes(String title) { super(title); // [..] // Wenn der addButton im Focus ist und ENTER gedrückt wird // wird automatisch der Text aus dem TextFeld in die TextArea // kopiert. Zusätzlich müssen hier auch die allgemeinen Operationen, // die ausgeführt werden sollen, egal welche Komponente im Focus ist, // implementiert sein. In unserem Fall das Hinzufügen und Löschen // über CTRL+A bzw. CTRL+B addButton.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { int code = e.getKeyCode(); if(code==KeyEvent.VK_ENTER) { copyText(); } else if ((code==KeyEvent.VK_A)&&(e.getModifiers()==2)) { copyText(); } else if ((code==KeyEvent.VK_D)&&(e.getModifiers()==2)) { deleteText(); } } }); // Wenn der deleteButton im Focus ist und ENTER gedrückt wird // wird automatisch die TextArea gelöscht. // Zusätzlich müssen hier auch die allgemeinen Operationen, // die ausgeführt werden sollen egal welche Komponente im Focus ist, // implementiert sein. In unserem Fall das Hinzufügen und Löschen // über CTRL+A bzw. CTRL+B deleteButton.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { int code = e.getKeyCode(); if( code==KeyEvent.VK_ENTER){ deleteText(); } else if ((code==KeyEvent.VK_A)&& (e.getModifiers()==2)) { copyText(); } else if ((code==KeyEvent.VK_D)&& (e.getModifiers()==2)) { deleteText(); } } }); // Auch das TextFeld kann im Focus sein. // Die allgemeinen Operationen für Hinzufügen und Löschen über CTRL+A bzw. // CTRL+B müssen also auch hier implementiert sein. field.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { int code = e.getKeyCode(); if ((code==KeyEvent.VK_A)&& (e.getModifiers()==2)) { copyText(); } else if ((code==KeyEvent.VK_D)&& (e.getModifiers()==2)) { deleteText(); } } }); // [..] } /** * Kopiert Text vom Textfeld in die TextArea. */ private void copyText() { editor.append(field.getText()); } /** * Löscht die TextArea. */ private void deleteText() { editor.setText(""); } }