シンプルな Pong ゲームを作成しようとしています。私が最初に取り組んでいるのは、ユーザーがフレームにある「左」または「右」ボタンをクリックしたときに、パドルが左または右に移動するようにすることです。ユーザーがボタンをクリックすると、MainPanel クラスのアクション リスナーが「paddlePosition」という Paddle クラスの定数を変更し、「repaint()」を呼び出します。しかし、それは機能しておらず、パドルは動いていません。「Hello World」と paddlePosition の値を出力するため、ボタンが機能していることはわかっていますが、再描画に問題があるようです。これまでのところ、すべてを機能させるために Swing、JFrame、Graphics2D を使用しています。
私のクラス:
ポン枠(ランクラス)
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class PongFrame extends JFrame{
private static final long serialVersionUID = 1L;
public PongFrame(){
ButtonPanel buttonPanel = new ButtonPanel();
MainPanel mainPanel = new MainPanel();
add(buttonPanel, BorderLayout.SOUTH);
add(mainPanel);
setSize(400, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new PongFrame();
}
}
メインパネル:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MainPanel extends JPanel implements ActionListener{
public Paddle paddle;
public MainPanel(){
setSize(300, 300);
paddle = new Paddle();
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D)g;
paddle.draw(g2);
}
public void actionPerformed(ActionEvent e) {
System.out.println("Hello World");
Paddle.movePaddleLeft();
System.out.println(Paddle.paddlePosition);
this.repaint();
}
}
ボタン パネル:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class ButtonPanel extends JPanel {
private static final long serialVersionUID = 1L;
public MainPanel mainPanelActionListener = new MainPanel();
JButton left;
JButton right;
public ButtonPanel(){
left = new JButton("Left");
right = new JButton("Right");
add(left);
add(right);
left.addActionListener(mainPanelActionListener);
right.addActionListener(mainPanelActionListener);
}
}
パドル:
import java.awt.Graphics2D;
public class Paddle{
public static int paddlePosition = 200;
private java.awt.Rectangle paddle;
private int centerCoordinateX;
private int centerCoordinateY;
public Paddle(){
//paddle = new java.awt.Rectangle(paddlePosition, 285, 100, 10); // x, y, width, height
}
public void draw(Graphics2D g2){
paddle = new java.awt.Rectangle(paddlePosition, 285, 100, 10);
g2.draw(paddle);
}
public static void movePaddleLeft(){
paddlePosition = (paddlePosition + 3);
}
}
誰が何が悪いのか分かりますか?ボタンをクリックしてもパドルが動かないのはなぜですか?