Avatar billede fredand Forsker
21. juni 2005 - 08:50 Der er 1 løsning

How to disconnet arrow-keys in a JTabbPane

Hello!
I try to bulid an app that uses a JTabbPane. I would like to be able to use the tab-key and shift+tab-key to switch among the tabbs in the JTabbpane.

I would also like to be able to use the left and right-arrow keys to some special task. But now those keyevents shifts the tabbs as the tab-key.

Does any one know how to disconnect the JTabbPane to listen for arrow-keys?

Below is a quick app that describes this.

Best regards
Fredrik

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

public class TabbTest extends JPanel implements KeyListener
{
    JTabbedPane tabbedPane = new JTabbedPane();
    JButton b1 = new JButton("1");
    JButton b2 = new JButton("2");
    JButton b3 = new JButton("3");
    JButton b4 = new JButton("4");

    int selectedTab = 0;

    public TabbTest()
    {
        setLayout(new BorderLayout());
        tabbedPane.addTab("1", null, b1, "");
        tabbedPane.addTab("2", null, b2, "");
        tabbedPane.addTab("3", null, b3, "");
        tabbedPane.addTab("4", null, b4, "");

        add(tabbedPane, BorderLayout.CENTER);

        tabbedPane.setFocusTraversalKeysEnabled(false);
        tabbedPane.addKeyListener( this);
    }

    public void changeTabb(boolean dir)
    {
        if(dir)
        {
            selectedTab++;
            if(selectedTab > 3)
            {
                selectedTab = 0;
            }
            tabbedPane.setSelectedIndex(selectedTab);
        }
        else
        {
            selectedTab--;
            if(selectedTab < 0)
            {
                selectedTab = 3;
            }
            tabbedPane.setSelectedIndex(selectedTab);
        }
    }

    public void keyPressed(KeyEvent ke)
    {
        if(ke.getKeyCode() == KeyEvent.VK_TAB)
        {
              if(ke.getModifiers() != InputEvent.SHIFT_MASK)
              {
                changeTabb(true);
            }
            else
            {
                changeTabb(false);
            }
        }
        else if(ke.getKeyCode() == KeyEvent.VK_LEFT)
        {
            System.out.println("This key shall not shift the tabbs");
        }
        else if(ke.getKeyCode() == KeyEvent.VK_RIGHT)
        {
            System.out.println("This key shall not shift the tabbs");
        }
    }

    public void keyReleased(KeyEvent ke)
    {
    }

    public void keyTyped(KeyEvent ke)
    {
    }

    public static void main(String[] args)
    {
        TabbTest tabbTest = new TabbTest();
        JFrame jFrame = new JFrame("TabbTest");
        jFrame.setSize(400, 400);
        jFrame.getContentPane().add(tabbTest);
        jFrame.show();
    }
}
Avatar billede fredand Forsker
27. juni 2005 - 09:26 #1
ke.consume()

/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