swt keylistener

Drizztd

Grünschnabel
Hallo,

ich habe ein dialogfenster wie kann ich dort auf das event enter und esc reagieren.
Muss ich bei jedem input feld den keylistener setzen.

Was ist wenn ich mit F1 eine hilfe anzeigen möchte muss ich das auch auf jedes input feld setzen?

mfg
christian
 
Hallo Drizztd,


F1 Taste abfragen

public void keyPressed(java.awt.event.KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == java.awt.event.KeyEvent.VK_F1)

Enter Abfrage: if (keyCode == java.awt.event.KeyEvent.VK_ENTER)

Escape : if (keyCode == java.awt.event.KeyEvent.VK_ESCAPE)

Gruß

Harald[
 
Ich benutze aber swt!

Hab jetzt nach längerem googlen was gefunden
Code:
//		 ESC key acts as the Cancel button.
		Control[] widgets = dialog_shell.getChildren();
		for (int i=0; i < widgets.length; i++) {
		widgets[i].addKeyListener(new KeyAdapter() {
		public void keyReleased(KeyEvent event) {
		if (event.character == SWT.CR) { 		
			doClick();
		}
		}
		});
		}
 
Zuletzt bearbeitet:
Hallo!

Also ich denke jedem Control diesen Listener manuel anzuhängen ist nicht so schick...
schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.HelpEvent;
import org.eclipse.swt.events.HelpListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

/**
 * @author Thomas.Darimont
 * 
 */
public class GlobalHelpEventListenerExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setText("GlobalHelpEventListenerExample");
        shell.setLayout(new GridLayout(1, true));

        HelpListener helpListener = new HelpListener() {
            public void helpRequested(HelpEvent e) {

                Object src = e.getSource();
                Control controlWithFocus = Display.getCurrent()
                        .getFocusControl();
                if (controlWithFocus instanceof Text) {
                    System.out.println("Help Requested for: "
                            + ((Text) controlWithFocus).getText());
                } else {
                    System.out.println("Help Requested for: " + src);
                }

            }
        };
        shell.addHelpListener(helpListener);

        Text text = null;
        for (int i = 0; i < 10; i++) {
            text = new Text(shell, SWT.NONE);
            text.setText("text" + i);
        }

        shell.pack();
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

}

Gruß Tom
 
Versuch doch mal folgendes:

Java:
Display display = Display.getDefault( );
			
//add a global listener for key down events
/which will trigger a plugin command if a command is
//associated with the given key
display.addFilter(SWT.KeyDown, new Listener() {
	public void handleEvent(Event event) {
		System.out.println("Key " + event.keyCode + " hit.");
					
	}
});
 
Hallo!

Wenn man das kombiniert schauts ganz gut aus:
Java:
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.HelpEvent;
import org.eclipse.swt.events.HelpListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

/**
 * @author Thomas.Darimont
 * 
 */
public class GlobalHelpEventListenerExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setText("GlobalHelpEventListenerExample");
        shell.setLayout(new GridLayout(1, true));

        HelpListener helpListener = new HelpListener() {
            public void helpRequested(HelpEvent e) {

                Object src = e.getSource();
                Control controlWithFocus = Display.getCurrent()
                        .getFocusControl();
                if (controlWithFocus instanceof Text) {
                    System.out.println("Help Requested for: "
                            + ((Text) controlWithFocus).getText());
                } else {
                    System.out.println("Help Requested for: " + src);
                }
            }
        };
        shell.addHelpListener(helpListener);
        display.addFilter(SWT.KeyDown, new Listener() {
            public void handleEvent(Event event) {
                switch (event.keyCode) {
                case SWT.ESC: {
                    System.out.println("Esc");
                }
                    break;
                case SWT.CR: {
                    System.out.println("CR");
                }
                    break;
                }
            }
        });

        Text text = null;
        for (int i = 0; i < 10; i++) {
            text = new Text(shell, SWT.NONE);
            text.setText("text" + i);
        }

        shell.pack();
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

}
ich würde die F1 Aktion mit dem Help Listener deshalb vom Rest Trennen weil beim anzeigen der Hilfe sicherlich ganz andere Schritte notwendig werden als bei Enter oder Esc. AFAIK bieten die JFace Wizards unter Eclipse aber von Haus aus die Möglichkeit auf solche Events zu reagieren...

Gruß Tom
 
Hallo,

ok das funktioniert ja auf dem Display ganz gut, warum geht das aber auf einem Dialog nicht? Der Code funktioniert auf der ersten Shell super, wenn ich jedoch eine eigene Dialogklasse erzeuge so wie hier --> http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/Howtocreateyourowndialogclasses.htm

dann reagiert das Fenster erst mal auf ESC von alleine, und der listener geht gar nicht.
Warum ist das so?

Code:
		dialog_shell.addListener(SWT.KeyDown, new Listener() {
			public void handleEvent(Event event) {
				switch (event.keyCode) {
				case SWT.ESC: {
					 System.out.println("ESC");
				}
					break;
				case SWT.CR: {
					 System.out.println("CR");
				}
					break;
				}
			}	
		});
 
dialog_shell.addListener(SWT.KeyDown, new Listener() {
public void handleEvent(Event event) {
switch (event.keyCode) {
case SWT.ESC: {
System.out.println("ESC");
break;
}

case SWT.CR: {
System.out.println("CR");
break;
}

}
}
});

Du hattest das break; am falschen Ort, darum ist eh nie weiter gekommen als zum ESC.
Zwar etwas spät die Antwort, aber für andere die hier vorbeischauen nützlich :)
 
Hallo,

ich versuche seit garantiert schon einer Stunde den KeyAdapter für die Escape-Taste zu implementieren und bis jetzt hat nichts geklappt und ich habe keine Lust andere Packages dafür extra zu installieren.
e.getCode() liefert immer null und ich weiß nicht womit ich e.getChar() vergleichen kann.

Bin über jeden Tipp dankbar. :)
 

Neue Beiträge

Zurück