Avatar billede imperten Nybegynder
25. maj 2001 - 22:34 Der er 7 kommentarer

KeyListener

Hvordan får jeg et tastaturtast registreret på skærmen? Jeg kan ikke få det til at virke på samme måde som med musen... hvordan så?
For ikke at få en masse forkerte svar, skal jeg lige sige, at der altså ikke er noget felt at skrive i.
IDGs forslag dur ikke længere, idet compileren skriver, at metoden er depricated.

public boolean keyUp(Event tast, int bogstav) {
  skærm.drawString((char)bogstav, 100, 100);
  repaint();
  return(true);
}

Hvor returnerer den forøvrigt til?
Avatar billede aligncenter Nybegynder
26. maj 2001 - 00:14 #1
Brug keyListener interfacet
husk at
import java.awt.event;




public class KeyEventDemo ...  implements KeyListener ... {
    ...//where initialization occurs:
    typingArea = new JTextField(20);
    typingArea.addKeyListener(this);
    ...
    /** Handle the key typed event from the text field. */
    public void keyTyped(KeyEvent e) {
    displayInfo(e, \"KEY TYPED: \");
    }

    /** Handle the key pressed event from the text field. */
    public void keyPressed(KeyEvent e) {
    displayInfo(e, \"KEY PRESSED: \");
    }

    /** Handle the key released event from the text field. */
    public void keyReleased(KeyEvent e) {
    displayInfo(e, \"KEY RELEASED: \");
    }
    ...
    protected void displayInfo(KeyEvent e, String s){
    ...
    char c = e.getKeyChar();
    int keyCode = e.getKeyCode();
    int modifiers = e.getModifiers();
    ...
    tmpString = KeyEvent.getKeyModifiersText(modifiers);

    ...//display information about the KeyEvent...
    }
}
Avatar billede imperten Nybegynder
26. maj 2001 - 17:56 #2
Hej aligncenter

Din løsning minder meget om de forsøg, jeg også har begået. Dog havde jeg ikke fundet frem til getKeyChar, getKeyCode og getModifiers. Det kan muligvis forklare, jeg ikke har kunnet få noget frem.

Men inden det kommer så vidt, så skal: ”typingArea = new JTextField(20); ”, som du skriver opklares. Her beklager compileren sig over en manglende identifier. Jeg har prøvet at skrive String og Text foran, men ingen af delene kan godkendes. I øvrigt er jeg ikke i stand til at finde JTextField i dokumentationen. Jeg har prøvet at fjerne J’et, i håb om at det var en tastefejl; men heller ikke det hjalp noget.

Jeg håber, der findes en fornuftig forklaring på dette?
Avatar billede aligncenter Nybegynder
26. maj 2001 - 21:38 #3
/*
* Swing version
*/

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

public class KeyEventDemo extends JApplet
                          implements KeyListener,
                                    ActionListener {
    JTextArea displayArea;
    JTextField typingArea;
    static final String newline = \"\\n\";

    public void init() {
        JButton button = new JButton(\"Clear\");
        button.addActionListener(this);

        typingArea = new JTextField(20);
        typingArea.addKeyListener(this);

        displayArea = new JTextArea();
        displayArea.setEditable(false);
        JScrollPane scrollPane = new JScrollPane(displayArea);
        scrollPane.setPreferredSize(new Dimension(375, 125));

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(typingArea, BorderLayout.NORTH);
        contentPane.add(scrollPane, BorderLayout.CENTER);
        contentPane.add(button, BorderLayout.SOUTH);
        setContentPane(contentPane);
    }

    /** Handle the key typed event from the text field. */
    public void keyTyped(KeyEvent e) {
        displayInfo(e, \"KEY TYPED: \");
    }

    /** Handle the key pressed event from the text field. */
    public void keyPressed(KeyEvent e) {
        displayInfo(e, \"KEY PRESSED: \");
    }

    /** Handle the key released event from the text field. */
    public void keyReleased(KeyEvent e) {
        displayInfo(e, \"KEY RELEASED: \");
    }

    /** Handle the button click. */
    public void actionPerformed(ActionEvent e) {
        //Clear the text components.
        displayArea.setText(\"\");
        typingArea.setText(\"\");

        //Return the focus to the typing area.
        typingArea.requestFocus();
    }

    /*
    * We have to jump through some hoops to avoid
    * trying to print non-printing characters
    * such as Shift.  (Not only do they not print,
    * but if you put them in a String, the characters
    * afterward won\'t show up in the text area.)
    */
    protected void displayInfo(KeyEvent e, String s){
        String charString, keyCodeString, modString, tmpString;

        char c = e.getKeyChar();
        int keyCode = e.getKeyCode();
        int modifiers = e.getModifiers();

        if (Character.isISOControl(c)) {
            charString = \"key character = \"
                      + \"(an unprintable control character)\";
        } else {
            charString = \"key character = \'\"
                      + c + \"\'\";
        }

        keyCodeString = \"key code = \" + keyCode
                        + \" (\"
                        + KeyEvent.getKeyText(keyCode)
                        + \")\";

        modString = \"modifiers = \" + modifiers;
        tmpString = KeyEvent.getKeyModifiersText(modifiers);
        if (tmpString.length() > 0) {
            modString += \" (\" + tmpString + \")\";
        } else {
            modString += \" (no modifiers)\";
        }

        displayArea.append(s + newline
                          + \"    \" + charString + newline
                          + \"    \" + keyCodeString + newline
                          + \"    \" + modString + newline);
    }
Avatar billede aligncenter Nybegynder
26. maj 2001 - 21:39 #4
husk lige en }tilsidst(fik den ikke med) ellers brokker compileren sig
Avatar billede imperten Nybegynder
27. maj 2001 - 00:10 #5
Det er givetvis et udmærket eksempel, du har foreslået, men jeg kan nu ikke få det til at funke.

import javax.swing.*;    kan ikke findes; og:
class JApplet                  brokker compileren sig også over.

Jeg ved ikke, om jeg har en gammel version af Java, siden den ikke vil acceptere noget med et J foran.
Men jeg fik den til at godkende følgende i dit første eksempel:

TextField typingArea = new TextField(20);

Men der kommer ikke noget frem på skærmen; end ikke det følgende giver nogen reaktion i DOS-prompten:

  public void keyTyped(KeyEvent e) {
    displayInfo(e, \"KEY TYPED: \");
    System.out.println(”TEST: ” + typingArea);
  }

Jeg fatter ikke, hvor key tastningerne så havner henne. For den må vel have igangsat Listener?
Avatar billede logical Nybegynder
27. maj 2001 - 09:34 #6
Drop IDG bogen for en mere up-to-date version af en java lærebog.

Brug evt. de muligheder beskrevet i javasoft tutorial. De inkluderer opsætning, afprøvning etc. og har alle de klasser, som aligncenter bruger.

Kig her:

http://java.sun.com/docs/books/tutorial/

Start med \"Your First Cup of Coffee\" og \"Getting Started\".

De er dog på engelsk, så hvis du vil undgå det, bør du lede efter en anden lærebog. Jeg selv er ikke den bedste til at fortælle hvilken, da jeg ikke aner, hvilke der er, men har da set nogen (som er hedre end IDG hæftet).
Avatar billede imperten Nybegynder
30. maj 2001 - 20:17 #7
Det er muligt sådan en swing løsning er sagen; men jeg har nu fået løst mit program med 60 hjemmelavede knapper, og det ser på sin vis bedre ud, end det jeg oprindelig havde tænkt mig. Så i denne omgang dropper jeg den fidus… eller hvad det skal kaldes.

Men det undrer mig stadig, at det andet ikke virker. Når man implements KeyListener i class linjen og dernæst addKeyListener i init() rutinen, så burde den kunne finde ind i keyTyped, keyPressed og/eller keyReleased funktionerne, når en tast aktiveres; akkurat som den fungerer med musehændelserne. Hvor er ellers logikken henne?
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