Avatar billede fredand Forsker
11. juli 2004 - 20:03 Der er 3 kommentarer og
1 løsning

Get a Tab-keypress?

Hello!

I try to indicate a keypress on the TAB-key on my laptop dell inspiron 3800, the computer shouldn't matter. But I do not get any indication at all. On my "Tab"-key it doesn't got the text Tab, instead it got 2 arrows.

But the code below doesn't notice anything at all when I press the arrow key (my Tab):

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Test extends JPanel implements KeyListener
{
    public Test()
    {
        setBackground(Color.red);
        addKeyListener( this );
        setFocusable(true);
        requestFocus();
    }

    public void keyPressed(KeyEvent ke)
    {
        System.out.println(ke.getKeyCode() + " " + KeyEvent.VK_TAB);
        if(ke.getKeyCode() == KeyEvent.VK_TAB)
        {
            System.out.println("Tab pressed");
        }
        else if(ke.getKeyCode() == KeyEvent.VK_1)
        {
            System.out.println("1 pressed");
        }
    }

    public void keyReleased(KeyEvent ke)
    {
    }

    public void keyTyped(KeyEvent ke)
    {
    }

    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Tab Test");
        frame.getContentPane().add(new Test());
        frame.setSize(200, 200);
        frame.show();
    }
}

An other question that I got is how to indicate a keypress like CRTL and Z at the same time?

Best regards
Fredrik
Avatar billede _carsten Nybegynder
12. juli 2004 - 20:43 #1
If you add this line to your constructor:  setFocusTraversalKeysEnabled(false);
it will work.

But - by doing so, you are disabling the focus subsystem traversal keys, and therefore you need to handle the focus traversal on your own.
Avatar billede _carsten Nybegynder
12. juli 2004 - 21:20 #2
Avatar billede _carsten Nybegynder
12. juli 2004 - 22:14 #3
Of course you could use the KeyBoardFocusManager and add a new KeyEventDispatcher, that gives you the possibility to capture all keyboard events before they hit the component and do whit these events whatever you like.

I've modified yuor Test class a little, to show what happens when you hit the TAB button.

Hope this gives some ways to solve your problem.


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Test extends JPanel implements FocusListener
{
    public Test(Color color)
    {
        button = new JButton("Don't dispatch");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                if(button.getText().equals("Don't dispatch")){
                    button.setText("Dispatch event");
                    dispKeyEvent = true;
                }
                else{
                    button.setText("Don't dispatch");
                    dispKeyEvent = false;
                }
            }
        });
        setBackground(color);
        setFocusable(true);
        requestFocus();
        addFocusListener(this);
       
        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(
                new KeyEventDispatcher() {
                            public boolean dispatchKeyEvent(KeyEvent e) { 
                                if (e.getKeyCode() == KeyEvent.VK_TAB) {
                                    System.out.println("Tab pressed");
                                    return dispKeyEvent;
                                }
                                System.out.println("Char " + e.getKeyChar());
                                return dispKeyEvent;
                            }
        });
}


    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Tab Test");
        frame.getContentPane().add(new Test(Color.red),BorderLayout.NORTH);
        frame.getContentPane().add(new Test(Color.green), BorderLayout.SOUTH);
        frame.getContentPane().add(button, BorderLayout.CENTER);
        frame.setSize(200, 200);
        frame.show();
    }
 
    public void focusGained(FocusEvent e) {
        setBackground(Color.BLUE);
    }
   
    public void focusLost(FocusEvent e) {
        setBackground(Color.YELLOW);
    }
   
    private static JButton button;
    private boolean dispKeyEvent = false;
}
Avatar billede fredand Forsker
14. juli 2004 - 20:56 #4
Thanks for your great answer mate!
Thanks a lot!
Fredrik
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

SOS International

Cisco Call Manager Specialist

Netcompany A/S

Test Consultant

Operate Technology A/S

PHP-udvikler til Drupal

Nextway Software A/S

Software Architect