Avatar billede bailey Nybegynder
27. februar 2003 - 13:25 Der er 3 kommentarer og
3 løsninger

Tabulator - KeyAdapter, KeyListener ??? - HJÆLP

Hej gutter

Jeg har nu spildt lidt over en dags arbejde, i forsøget på at få noget action på når jeg bruge Tab, men helt forgæves. Jeg bruger Jbuilder 8 Personale Edi. med JDK 1.4.1

Mit mål er:    Ved tryk på Tabulatoren, skal en Label ændre tekst.
Men indtil videre ville det være fint hvis bare JOptionPane.showMessageDialog(null, "test");

Jeg har fået smedet denne kode sammen til formålet...


    //Creating the instance of KeyEventHandler
    KeyEventHandler keyHandler = new KeyEventHandler();

    //Adding keyListener to TextFields
    jobField.addKeyListener(keyHandler);
    startTimeField.addKeyListener(keyHandler);
    endTimeField.addKeyListener(keyHandler);
   
    //Getting the pressed key - I Guess ?
    jobField.getInputMap().put(KeyStroke.getKeyStroke("TAB"), "none");
    startTimeField.getInputMap().put(KeyStroke.getKeyStroke("TAB"), "none");
    endTimeField.getInputMap().put(KeyStroke.getKeyStroke("TAB"), "none");

  //Class KeyEventHandler - setting the action for the Tab
  private class KeyEventHandler implements KeyListener, KeyAdapter{
    public void keyPressed(KeyEvent e){
      if(e.getKeyCode() == KeyEvent.VK_END)
        JOptionPane.showMessageDialog(null, "test");
    }
  }


Hvis nogen har en løsning på dette vil jeg være ekstremus hapinus ;o)
Avatar billede magoo20000 Nybegynder
27. februar 2003 - 13:39 #1
Avatar billede viht Nybegynder
27. februar 2003 - 14:17 #2
Her:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestFrame extends JFrame {
   
    public TestFrame() {
        super("Test");
        setSize(400,400);
       
        final JLabel label = new JLabel("Hit tab!");
        JTextArea area = new JTextArea();
        area.getInputMap().put(KeyStroke.getKeyStroke("TAB"), "none");
        area.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent event) {
                label.setText("You hit tab!");
            }
        });
       
        JPanel panel = new JPanel();
        panel.add(label);
       
        getContentPane().add(area, BorderLayout.CENTER);
        getContentPane().add(label, BorderLayout.SOUTH);
    }   
}

class TestIt {
    public static void main(String[] args) {
        new TestFrame().show();
    }
}
Avatar billede viht Nybegynder
27. februar 2003 - 14:19 #3
Du kan for en ordens skyld tilføje følgende if sætning over
label.setText("You hit tab!"):
if( event.getKeyCode() == KeyEvent.VK_TAB )

På den måde ændrer du kun label når du trykker TAB.
Avatar billede Slettet bruger
27. februar 2003 - 16:01 #4
Det er ikke nødvendigt at bruge textarea.

Både JTextField og TextField nedarver fra java.awt.Component.

Denne har en metode setFocusTraversalKeysEnabled(boolean b)

Så du kan f.eks. kalde:

startTimeField.setFocusTraversalKeysEnabled(false)
endTimeField.setFocusTraversalKeysEnabled(false)
Avatar billede Slettet bruger
27. februar 2003 - 16:13 #5
Her er et lille test eksempel hvor jeg har brugt en textfield:

import java.awt.*;

public class TextTest extends Frame {
    public TextTest() {
    super("TextTest");
    setSize(new Dimension(640, 480));
   
    Panel p = new Panel();
    p.setLayout(new BorderLayout());
   
    TextField tmp = new TextField();
    p.add(tmp, BorderLayout.CENTER);
    tmp.addKeyListener(new TabList());
    tmp.setFocusTraversalKeysEnabled(false);
   
    add(p);
    setVisible(true);
    }
   
    public static void main(String[] args) {
    TextTest f = new TextTest();
    }
   
}


import java.awt.event.*;

public class TabList implements KeyListener {
    public void keyTyped(KeyEvent e) {
    System.out.println("KeyTyped");
    }
   
    public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_TAB) System.out.println("Tab was pressed!");
    System.out.println("KeyPressed");
    }
   
    public void keyReleased(KeyEvent e) {
    System.out.println("KeyReleased");
    }
}
Avatar billede bailey Nybegynder
05. marts 2003 - 13:18 #6
Kanon, tusind tak for hjælpen c",)
Jeg deler pointene mellem jer, da det var tre rigtig gode svar.

Endnu en gang tak for hjælpen c",)
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