Java输入类

时间:2013-10-23 22:18:31

标签: java class input

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public class Panel extends JPanel {
/**
 * 
 */
private static final long serialVersionUID = 1L;

final static int WIDTH = 800;
final static int HEIGHT = 600;

private int x = 40, y = 49, r = 20;

Dimension SIZE = new Dimension(WIDTH, HEIGHT);

public Panel() {
    setLayout(new BorderLayout());
    setPreferredSize(SIZE);
    setMaximumSize(SIZE);
    setMinimumSize(SIZE);
    setBackground(Color.cyan);
    setFocusable(true);
    requestFocus();
    new input(this);

}

public void paint(Graphics g) {
    super.paint(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.fillOval(x, y, r, r);

    repaint();
}

public int getX() {
    return x;
}

public int getY() {
    return y;
}

public void setX(int x) {
    this.x = x;
}

public void setY(int y) {
    this.y = y;
}

}

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class input extends KeyAdapter {
private Panel panel;

public input(Panel panel) {
    panel = new Panel();
    panel.addKeyListener(this);
}

@Override
public void keyPressed(KeyEvent e) {
    int keycode = e.getKeyCode();

    int x = panel.getX();
    int y = panel.getY();

    if (keycode == KeyEvent.VK_LEFT) {
        panel.setX(x - 1);
    }

    if (keycode == KeyEvent.VK_RIGHT) {
        panel.setX(x + 1);

    }
}

}

我是Java新手。我试图专门为KeyListener创建一个类 但它只是不起作用。我无法弄清楚我做错了什么。

创建一个inputhandler类可能毫无意义,它只控制一个类(jpanel),但我曾经将我的所有代码放在一个单独的类中。它看起来很糟糕。我正在学习将它们分成更多单独的类或使它们更加面向对象〜 我只是在混淆何时创建一个新课程,何时没有。 请帮帮我,你能告诉我上面的代码我做错了什么吗?我的想法是错的还是只是代码?

1 个答案:

答案 0 :(得分:0)

这看起来是KeyListener不起作用的第一个原因:

public input(Panel panel) {
    panel = new Panel();
    panel.addKeyListener(this);
}

执行此操作时:

new input(this);

因为你也是这样做的:

panel = new Panel();

您正在将KeyListener添加到new Panel(),而不是您使用this传递给构造函数的面板。

我个人认为创建一个监听器对象只是为了听,但我不认为这是必要的。

虽然这可能不会对你的听众造成影响,但我看到的另一个问题是你要重写你不应该在Swing中做的画。你应该重写paintComponent。请参阅在AWT和Swing中绘画http://www.oracle.com/technetwork/java/painting-140037.html#callbacks

另外,就样式而言,类名在Java中以大写字母开头。您的input课程应命名为Input