0

だから私はテスト目的のためだけに KeyBoardEvent を正直に使用しようとしています..私がやっていることは機能していないようです:/ うまくいけば、私がどこにいるのか教えていただけますか. ありがとう!

package com.dillyg10.test.Keys;

import java.awt.Window;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Keys extends JPanel implements KeyListener  {
    private static final long serialVersionUID = 1L;

    public Keys(){

    }

    public static void registerEvent(Window w){
        w.setFocusTraversalKeysEnabled(false);
        w.setFocusable(true);
        w.addKeyListener(new Keys());
    }
    public void keyPressed(KeyEvent e) {
        System.out.println(KeyEvent.getKeyText(e.getKeyCode()));
    }
    public void keyReleased(KeyEvent e) {

    }
    public void keyTyped(KeyEvent e) {

    }
    public static void gui() {

        JFrame frame = new JFrame("Keys");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        registerEvent(new Window(frame));


        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                gui();
            }
        });
     }
    }

このコードは基本的に、キーボードイベントが機能するかどうかを判断するためのテストです。キーが押されたときにキーを出力します..しかし、何も出力されません。

4

3 に答える 3

0

w.addKeyListener(new Keys());使用する代わりにw.addKeyListener(this);

これで問題が解決することを願っています。

于 2012-06-25T06:33:31.577 に答える
0

解決

package com.java.tests;

import java.awt.Window;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Keys extends JPanel implements KeyListener {

private static final long serialVersionUID = 1L;
public static Keys keys = new Keys();

public Keys() {
}

public void registerEvent(Window w) {
    w.addKeyListener(this);
    w.setSize(200,200);
}

@Override
public void keyPressed(KeyEvent e) {
    System.out.println(KeyEvent.getKeyText(e.getKeyCode()));
}

@Override
public void keyReleased(KeyEvent e) {
    System.out.println(KeyEvent.getKeyText(e.getKeyCode()));
}

@Override
public void keyTyped(KeyEvent e) {
}

public void gui() {

    JFrame frame = new JFrame("Keys");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    registerEvent(frame);

    //Display the window.
    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            keys.gui();
        }
    });
    }
}
于 2012-06-25T06:30:14.540 に答える
0

あなたのコードにいくつかの変更を加える自由を取り、それを機能させることができました:

パッケージ sample.examples;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Keys extends JPanel implements KeyListener  {
    private static final long serialVersionUID = 1L;

    public Keys(){
        this.setBackground(Color.black);
    }

    public void keyPressed(KeyEvent e) {
        System.out.println("Button Pressed: " + KeyEvent.getKeyText(e.getKeyCode()));
    }
    public void keyReleased(KeyEvent e) {       

    }
    public void keyTyped(KeyEvent e) {      

    }
    public void gui() {

        JFrame frame = new JFrame("Keys");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(500,500));
        frame.setFocusTraversalKeysEnabled(false);
        frame.setFocusable(true);
        frame.setContentPane(this);
        frame.addKeyListener(this);      


        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                Keys k = new Keys();
                k.gui();
            }
        });
     }
    }

あなたの問題の 1 つは、 にサイズを指定していないという事実だったようJPanelですJPanel。分かりやすいようにJPanel黒にしました。

于 2012-06-25T06:42:32.613 に答える