我正在使用 Swing 设计一个简单的乒乓球游戏。该游戏由 5 个 .java 文件实现 - PingPongApp.java 是 JVM 的入口点,MainPanel.java 是一个面板,它组织了 2 个子面板:按钮面板和屏幕面板 (ScreenPanel.java),然后是 Ball.java 和 Racket .java 实现了球和球拍的逻辑。我正在尝试在屏幕面板上绘制球和球拍,但问题是不知何故,球是我运行应用程序时唯一绘制的对象。这是我的代码:
球拍.java
import java.awt.*;
public class Racket{
public Racket(int x, int y, int width, int height){
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public void draw(Graphics g){
g.setColor(Color.RED);
g.fillRect(x, y, width, height);
}
private int x, y, width, height;
}
Ball.java
import java.awt.*;
public class Ball{
public Ball(int x, int y, int velocityX, int velocityY){
this.x = x;
this.y = y;
this.velocityX = velocityX;
this.velocityY = velocityY;
}
public void setBounds(int width, int height){
rightBoundary = width - DIAMETER;
bottomBoundary = height - DIAMETER;
}
public void move(){
// Move the ball
}
public void draw(Graphics g){
g.fillOval(x, y, DIAMETER, DIAMETER)
}
private final static int DIAMETER = 21;
private int x, y, velocityX, velocityY, rightBoundary, bottomBoundary;
}
屏幕面板.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ScreenPanel extends JPanel{
public ScreenPanel(){
initComponents();
}
private void initComponents(){
interval = 35;
ball = new Ball(130, 0, 2, 3);
racket = new Racket(120, 250, 70, 10);
setPreferredSize(new Dimension(200, 200));
setBorder(BorderFactory.createLineBorder(Color.BLACK));
timer = new Timer(interval, new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
ball.setBounds(getWidth(), getHeight());
ball.move();
repaint();
}
});
}
public void paintComponent(Graphics g){
super.paintComponent(g);
ball.draw(g);
racket.draw(g);
}
public void startOrPauseGame(boolean turnOnOff){
if(turnOnOff){
timer.start();
} else {
timer.stop();
}
}
private Racket racket;
private Timer timer;
private Ball ball;
private int interval;
}
主面板.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MainPanel extends JPanel{
public MainPanel(){
initComponents();
}
private void initComponents(){
buttonPanel = new JPanel(new FlowLayout());
screenPanel = new ScreenPanel();
cmdStart = new JButton("Start/Resume");
cmdPause = new JButton("Pause");
addComponentsToPane();
}
public void addComponentsToPane(){
buttonPanel.add(cmdStart);
buttonPanel.add(cmdPause);
setLayout(new BorderLayout());
add(buttonPanel , BorderLayout.NORTH);
add(screenPanel , BorderLayout.SOUTH);
cmdStart.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
// Start the game
}
});
cmdPause.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
// Pause the game
}
});
}
private ScreenPanel screenPanel;
private JPanel buttonPanel;
private JButton cmdStart, cmdPause;
}