Tab-Taste abfangen



  • Hallo

    Ich habe eine Swing App gebaut. Nun möchte ich die Anfangen das wenn die Tab-Taste gedrückt wird etwas passiert. Also bin ich eine kleine Test-App dafür geschrieben:

    /* Listing2906.java */
    
    import java.awt.*;
    import java.awt.event.*;
    
    public class TestEvent
    extends Frame
    implements KeyListener
    {
      String msg1 = "";
      String msg2 = "";
    
      public static void main(String[] args)
      {
        TestEvent wnd = new TestEvent();
      }
    
      public TestEvent()
      {
        super("Tastaturereignisse");
        addKeyListener(this);
    
        setBackground(Color.lightGray);
        setSize(300,200);
        setLocation(200,100);
        setVisible(true);
      }
    
      public void paint(Graphics g)
      {
        if (msg1.length() > 0) {
          draw3DRect(g,20,50,250,30);
          g.setColor(Color.black);
          g.drawString(msg1,30,70);
        }
        if (msg2.length() > 0) {
          draw3DRect(g,20,100,250,30);
          g.setColor(Color.black);
          g.drawString(msg2,30,120);
        }
      }
    
      void draw3DRect(Graphics g,int x,int y,int width,int height)
      {
        g.setColor(Color.darkGray);
        g.drawLine(x,y,x,y+height);
        g.drawLine(x,y,x+width,y);
        g.setColor(Color.white);
        g.drawLine(x+width,y+height,x,y+height);
        g.drawLine(x+width,y+height,x+width,y);
      }
    
      public void keyPressed(KeyEvent event)
      {
        msg1 = "";
        System.out.println(
          "key pressed: " +
          "key char = " + event.getKeyChar() + "  " +
          "key code = " + event.getKeyCode()
        );
        if (event.getKeyChar() == KeyEvent.VK_TAB) {
    
        	  msg1 = "TAB";  
    
          //Modifier abfragen
          if (msg1.length() > 0) {
            if (event.isAltDown()) {
              msg1 = "ALT + " + msg1;
            }
            if (event.isControlDown()) {
              msg1 = "STRG + " + msg1;
            }
            if (event.isShiftDown()) {
              msg1 = "UMSCHALT + " + msg1;
            }
          }
        }
        repaint();
      }
    
      public void keyReleased(KeyEvent event)
      {
        System.out.println("key released");
        msg1 = "";
        repaint();
      }
    
      public void keyTyped(KeyEvent event)
      {
        char key = event.getKeyChar();
        System.out.println("key typed: " + key);
        if (key == KeyEvent.VK_TAB) {
        	System.out.println("TAB wurde gerdruckt");
        }
        repaint();
      }
    }
    

    Leider funktioniert es nicht! Der Code kommt aus dem www.javabuch.de
    Das Tab Event wird wohl von so eineme Fokus-Manager abgefangen. So das wenn man die Tab Taste drückt die nächste Komponente selektiert wird.

    Nun habe ich www.google.de benutzt.
    http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_20138670.html zeigt eine Lösung. Aber dafür muss ich die Komponenten überschreiben. Und das geht bei meinem Projekt aus diversen Gründen nicht.

    Kennt jemand eine Lösung ohne die Komponenten neu erfinden zu müssen??

    Vielen Dank schon mal für die Antworten.



  • setFocusTraversalKeysEnabled(false)



  • Hallo

    ich kam erst heute dazu wieder hier reinzuschauen.

    Die Methode funktioniert 1A !!

    Vielen Dank.


Anmelden zum Antworten