0
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 クラスを作成しても意味がないかもしれません。それは 1 つのクラス (jpanel) だけを制御しますが、以前はすべてのコードを 1 つのクラスにまとめていました。見栄えが悪いです。それらをより個別のクラスにするか、よりオブジェクト指向にすることを学んでいます〜いつ新しいクラスを作成するか、いつ作成しないかを混乱させます。上記のコードで何が間違っていたか教えてください。私の考えは間違っていましたか、それともコードだけでしたか?

4

1 に答える 1