为什么不动?

时间:2016-06-07 11:38:33

标签: java

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

public class Game implements KeyListener {

    static int imgx = 20;
    static int imgy = 20;
    JFrame fen = new JFrame();
    JPanel pan = new JPanel();

    public void display() {

        fen.add(pan);
        fen.addKeyListener(this);
        JLabel img = new JLabel();
        img.setText("zzz");
        img.setBounds(imgx, imgy, 20, 20);
        pan.add(img);
        fen.setVisible(true);
        fen.setSize(480, 272);
    }

    public static void main(String[] args) {
        Game disp = new Game();
        disp.display();
    }

    @Override
    public void keyTyped(KeyEvent e) {
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        if(e.getKeyCode() == KeyEvent.VK_LEFT) {
            System.out.println("test");
           imgx -= 10;
           fen.revalidate();
        }
    }


}

为什么,当我输入左边时,标签本身不会移动?请帮我... 我有一个关键的JFrame监听器,以及为什么当我在键盘上键入左键时它没有进入我的keyTyped事件?

1 个答案:

答案 0 :(得分:3)

关于keyListener。

e.getkeyCode()的帮助下:

  

返回与此事件中的键关联的整数keyCode。   返回:键盘上实际键的整数代码。 (对于   KEY_TYPED事件,keyCode是VK_UNDEFINED。)

将您的代码放在keyPressedkeyReleased方法中,您可以按原样使用代码。

值得一提的是这个答案中所说的: https://stackoverflow.com/a/7071810/2581593 KeyTyped事件仅识别可打印字符键,因此无论如何它都不能用于VK_LEFT。

关于移动标签。

setBounds()只有在您想要放置带边界的组件的布局为null时才有意义。

再次引用java文档:

  

每个JPanel对象都被初始化为使用FlowLayout,除非你   在创建JPanel时指定不同。

在您的情况下,为了能够将标签img绘制为给定的坐标,您需要添加: pan.setLayout(null);