STRG + TAB KeyEvent abfangen

sylo

Bekanntes Mitglied
Hi zusammen

Ich habe wie hier

http://www.java-forum.org/awt-swing-swt/7221-tab-funktion-fenster-aendern-genauer-strg-tab.html

genau das gleiche Problem. Da dieser Thread bereits geschlossen war muss ich leider einen neuen aufmachen.

Folgendes Problem:
Ich würde gerne die TastenKombo STRG+TAB abfangen und irgendwas auslösen.

Die Antwort von thE_29 war daraufhin:
Java:
import java.util.HashSet;
import javax.swing.KeyStroke;
import javax.swing.FocusManager;


    FocusManager fm = FocusManager.getCurrentManager();
    Set newKeys = new HashSet(fm.getDefaultFocusTraversalKeys(FocusManager.
        FORWARD_TRAVERSAL_KEYS));
    newKeys.remove(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,0));
    fm.setDefaultFocusTraversalKeys(FocusManager.FORWARD_TRAVERSAL_KEYS,
                                newKeys);

daraufhin schrieb der Themenstarter,
Hah! Geknackt!!!

Ich liebe Java
Mann, hat das gedauert! Also, dass mit den FocusManager und den DefaultFocusTraversalKeys war schon gut, aber statt TAB musste ich "ctrl TAB" rausnehmen! Ich wußte gar nicht, dass es so eine Kombination auch dort gibt ... :?

Also nochmal danke für die Tipps ... Leider habe ich jetzt gemerkt, dass hier im Forum schnell geholfen wird, was bedeutet, dass ich ab jetzt mehr Fragen posten werde ...

Reeny

So wie ich das verstehe, muss man hier die Zeile
Java:
newKeys.remove(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,0));
einfach ändern in das mit "ctrl TAB". Unter KeyEvent finde ich da aber leider nichts. Was verstehe ich den hier falsch?

Grüße
sylo
 
Hi

also ich habe es nicht hinbekommen. Ich weiß echt nicht wo mein Fehler ist. Mach jetzt folgendes.

Zuerst definiere ich auch die Action:
Java:
Action machWas = new AbstractAction() {
                                public void actionPerformed(ActionEvent e) {
                                    System.out.println(" JIPPIE: TASTENKOMBI ANGEKOMMEN!!!");
                                }
                            };
Dann entferne ich die TastenKombo
Java:
FocusManager fm = FocusManager.getCurrentManager();
                            Set newKeys = new HashSet(fm.getDefaultFocusTraversalKeys(FocusManager.
                                FORWARD_TRAVERSAL_KEYS));
                            newKeys.remove(KeyStroke.getKeyStroke("ctrl TAB"));
                            fm.setDefaultFocusTraversalKeys(FocusManager.FORWARD_TRAVERSAL_KEYS,
                                                        newKeys);
Und zu letzt überprüfe ich im KeyListener
Java:
public void keyReleased(KeyEvent e) {  
                                    if(e.isControlDown()){
                                        if(e.getKeyCode()==KeyEvent.VK_TAB)
                                            System.out.println("Endlich!!! TAB(released) mit STRG");
                                    }

                                }

Grüße
sylo
 
Was ist mit der Action machWas die hat ja mit dem anderen Code nichts zu tun.

Was Du mit dem Code bisher gemacht hast ist, dass die Tastenkombination STRG+TAB im FocusManager nicht mehr als "Forward_Traversal_Key" behandelt wird. Mehr nicht.

Der Code des KeyListeners schwebt ja auch irgendwie im luftleeren Raum, aber wenn der KeyListener an einer Textkomponte registriert ist, dann würde er beim Loslassen vom TAB (bei gedrückter STRG Taste) anspringen.

Wie z.B. in folgendem Code:
Java:
FocusManager fm = FocusManager.getCurrentManager();
Set newKeys = new HashSet(fm.getDefaultFocusTraversalKeys(FocusManager.FORWARD_TRAVERSAL_KEYS));
newKeys.remove(KeyStroke.getKeyStroke("ctrl TAB"));
fm.setDefaultFocusTraversalKeys(FocusManager.FORWARD_TRAVERSAL_KEYS, newKeys);
JTextField text = new JTextField();
text.addKeyListener(new KeyAdapter() {
	public void keyReleased(KeyEvent e) {
		if (e.isControlDown()) {
			if (e.getKeyCode() == KeyEvent.VK_TAB)
				System.out.println("Endlich!!! TAB(released) mit STRG");
		}
	}
});
 
Hi

stimmt. Die Action tut nichts zur Sache, deswegen weg damit.

Der KeyListener wird natürlich vorher erzeugt und meiner JTable, um die es sich dreht, zugewiesen.

Java:
KeyListener kl = new KeyListener() {
    public void keyTyped(KeyEvent e) {

    }

    public void keyReleased(KeyEvent e) {
      if(e.isControlDown()){
              if(e.getKeyCode()==KeyEvent.VK_TAB)
                   System.out.println("Endlich!!! TAB(released) mit STRG");
              }
      }

    public void keyPressed(KeyEvent e) {
                                   
    }
};

jTable.addKeyListener(kl);

Was Du mit dem Code bisher gemacht hast ist, dass die Tastenkombination STRG+TAB im FocusManager nicht mehr als "Forward_Traversal_Key" behandelt wird. Mehr nicht.
Was meintest du damit. Was muss ich den noch machen?
 
Wenn's um die JTable geht musst Du den Code ein bisschen abändern, da diese Ihre eigene FocusTraversalPolicy benutzt:
Java:
	Set newKeys = new HashSet(table.getFocusTraversalKeys(FocusManager.FORWARD_TRAVERSAL_KEYS));
	newKeys.remove(KeyStroke.getKeyStroke("ctrl TAB"));
	table.setFocusTraversalKeys(FocusManager.FORWARD_TRAVERSAL_KEYS, newKeys);
	table.addKeyListener(new KeyAdapter() {
		public void keyReleased(KeyEvent e) {
			if (e.isControlDown()) {
				if (e.getKeyCode() == KeyEvent.VK_TAB)
					System.out.println("Endlich!!! TAB(released) mit STRG");			}
		}
	});
 
Hi

Danke Michael. Die Zeile wars.

Java:
 Set newKeys = new HashSet(table.getFocusTraversalKeys(FocusManager.FORWARD_TRAVERSAL_KEYS));

Grüße
sylo
 

Neue Themen


Zurück
Oben