我正在使用 Swing 设计一个简单的乒乓球游戏。该游戏由 5 个 .java 文件实现——PingPongApp.java 是 JVM 的入口点,MainPanel.java 是一个包含 2 个子面板的面板:一个按钮面板和一个屏幕面板 (ScreenPanel.java),然后是 Ball.java 和 Racket .java 实现了球和 Racket 的逻辑。我试图在屏幕面板上同时绘制球和 Racket ,但问题是不知何故,当我运行该应用程序时,球是唯一绘制的对象。这是我的代码:
Racket .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;
}
球.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;
}
最佳答案
问题是您的 Racket 的 y 坐标大于面板 ScreenPanel
的首选尺寸高度:- 250 > 200:
racket = new Racket(120, 250, 70, 10);
^
setPreferredSize(new Dimension(200, 200));
让 Racket 离屏。
关于java - 在 JPanel 上绘制一个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11913923/