Avatar billede t_madsen Nybegynder
06. december 2004 - 18:03 Der er 8 kommentarer og
1 løsning

JTextField & KeyEvent VK_UP

Hej,

Er det muligt at få et JTextField til at reagere på andet end de karakterer man rent faktisk kan skrive i det, som for eksempel pil-op. Jeg har ledt et stykke tid på google, men finder ikke lige noget, der beskriver det jeg har brug for.

Det jeg skal bruge det til er et lille tekstbaseret adventure-spil, hvor jeg gerne vil kunne browse i de kommandoer man har indtastet, ved at hente dem fra et stack eller noget i den stil (jeg skal lige have lortet til at reagere på VK_UP), det kode jeg har indtil videre, ser således ud:

// Add a keylistener, for the purpose of browsing trough
// command history.
commandInput.addKeyListener(new KeyAdapter() {
                            public void keyTyped(KeyEvent e)
                                {commandLineListener(e);}       
                            });

/**
* When the user presses a key, the focus will be on the
* commandline.
*/
private void commandLineListener(KeyEvent e)
{
  char keyChar = e.getKeyChar();
  int keyCode = e.getKeyCode();
  System.out.println(keyChar);
  System.out.println(keyCode);
}

Alt det gør er jo bare at printe den tast som man trykker på ud, samt dens tilsvarende keyCode, men den printer intet ud på f.eks f-taster, og piletaster - det er det jeg har brug for. Håber folk fatter hvad jeg mangler :)
Avatar billede kalp Novice
06. december 2004 - 19:03 #1
et gæt ud i luften.. ved ikke om man kan.. men måske det var muligt at få din jtextfield til at arve fra en klasse som har de egenskaber.
Avatar billede mikkelbm Nybegynder
06. december 2004 - 22:34 #2
Jeg synes før jeg har haft problemer med keyTyped - så prøv lige med en keyPressed (KeyEvent e) i stedet.

Og du siger den ikke skriver "f-taster" ud - hvad er det? Er det bare tasten f du mener?


Og hvis du vil spørge på hvilken tast der er trykket, laver du det jo bare i din commandLineListener:

private void commandLineListener(KeyEvent e)
{
  char keyChar = e.getKeyChar();
  int keyCode = e.getKeyCode();
  System.out.println(keyChar);
  System.out.println(keyCode);

  if (keyCode == KeyEvent.VK_UP)
    System.out.println("Tasten: UP er trykket");
  else if (keycode == KeyEvent.VK_DOWN);
    System.out.println("Tasten: DOWN er trykket");
}
Avatar billede mikkelbm Nybegynder
06. december 2004 - 22:35 #3
Og med keyPressed mener jeg her:

// Add a keylistener, for the purpose of browsing trough
// command history.
commandInput.addKeyListener(new KeyAdapter() {
                            public void keyPressed(KeyEvent e)
                                {commandLineListener(e);}       
                            });
Avatar billede mikkelbm Nybegynder
06. december 2004 - 22:39 #4
Lige et super simpelt eksempel som virker:

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

public class Test extends JFrame
{   
    public Test()
    {
        setSize(400, 400);
       
        JTextArea field = new JTextArea();
        field.addKeyListener(new KeyAdapter()
        {
            public void keyPressed (KeyEvent e)
            {
                if (e.getKeyCode() == KeyEvent.VK_DOWN)
                    System.out.println ("DOWN");   
                else if (e.getKeyCode() == KeyEvent.VK_F)
                    System.out.println ("F er trykket");
            }
        });
       
        this.getContentPane().add(new JScrollPane(field), BorderLayout.CENTER);
       
    }   
   
    public static void main(String[] args)
    {
        new Test().setVisible(true);
    }
}



Håber ikke jeg har misforstået dit spørgsmål!?
Avatar billede mikkelbm Nybegynder
06. december 2004 - 22:46 #5
Hov - ser lige at du skriver JTextField, men det er så bare at skifte JTextArea ud med JTextField.
Avatar billede t_madsen Nybegynder
06. december 2004 - 23:45 #6
mikkelbm, med f-taster mente jeg fra F1-F12 :) Jeg prøver lige nogle af de ting af som du har skrevet, tak.
Avatar billede t_madsen Nybegynder
06. december 2004 - 23:52 #7
Well, tak for svar - jeg tror jeg har prøvet at gøre det mere besværligt end det var, takker :)
Avatar billede mikkelbm Nybegynder
06. december 2004 - 23:53 #8
Så vil jeg smide et svar...
Avatar billede mikkelbm Nybegynder
07. december 2004 - 00:01 #9
Og jeg var fuldstændig blank mht f-tasterne, men det var jo egentlig åbenlyst at det var f1, f2 osv. du mente :)
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