首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jave输入类

Jave输入类
EN

Stack Overflow用户
提问于 2013-10-23 22:18:30
回答 1查看 139关注 0票数 0
代码语言:javascript
复制
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);

    }
}

}

我是爪哇新手。我试图专门为KeyListener做一个类,但是它不起作用。我不知道我做错了什么。

创建一个inputhandler类可能毫无意义,它只控制一个类(jpanel),但我过去常常将所有代码放在一个类中。看起来糟透了。我正在学习把它们变成更独立的类,或者使它们更面向对象~我只是混淆了什么时候创建一个新类,而不是什么时候。请帮帮我,你能告诉我我上面的代码做错了什么吗?我的想法是错的还是只是密码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-23 22:53:10

这似乎是您的KeyListener无法工作的第一个原因:

代码语言:javascript
复制
public input(Panel panel) {
    panel = new Panel();
    panel.addKeyListener(this);
}

当你这样做时:

代码语言:javascript
复制
new input(this);

因为您还在这样做:

代码语言:javascript
复制
panel = new Panel();

您要将KeyListener添加到new Panel(),而不是要传递给带有this的构造函数的面板。

就我个人而言,我不认为创建侦听器对象只是为了侦听而存在问题,尽管我认为这在这里没有必要。

尽管这可能不会对您的听者产生影响,但我看到的另一个问题是,您正在重写不应该在Swing中执行的画图。您应该重写paintComponent。参见AWT和Swing中的绘图:http://www.oracle.com/technetwork/java/painting-140037.html#callbacks

同样,就样式而言,类名以Java中的大写字母开头。您的input类应该命名为Input

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19553351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档