0

我刚开始学习java,除了JFrameJLayout.

如何在 JFrame 中实现一个对象(球),并使其无限次反弹墙壁?

4

2 回答 2

0

您可以通过swingwith Threadconcept创建它

  • swing您可以在概念中通过摇摆 drawImage 来创建球

  • 要执行移动和延迟概念,您可以使用Threadpakage

为此,请参阅参考Java 完整版 7

于 2013-04-13T10:40:58.497 回答
0

一种方法是在 JFrame 中添加一个 JPanel 的子类,该子类具有重写的paintComponent 方法。此类可以具有用于球位置的字段和用于重新绘制面板的 javax.swing.Timer。它可能是这样的(未经测试):

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class BouncingBall extends JPanel{
    //Ball position
    private int x = 0;
    private int y = 0;
    //Position change after every repaint
    private int xIncrement = 5;
    private int yIncrement = 5;
    //Ball radius
    private final int R = 10;

    private Timer timer;

    public BouncingBall(){
        timer = new Timer(25, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
               BouncingBall.this.repaint();
        }
         });

    timer.start();
   }

   @Override
   protected void paintComponent(Graphics g) {
       super.paintComponent(g);
       //If the ball hits one of the panel boundaries
       //change to the opposite direction
       if (x < 0 || x > getWidth()) {
           xIncrement *= -1;
       }
       if (y < 0 || y > getHeight()) {
           yIncrement *= -1;
       }
       //increment position
       x += xIncrement;
       y += yIncrement;
       //draw the ball
       g.fillOval(x - R, y - R, R * 2, R * 2);
   }
}
于 2013-04-13T12:29:50.240 回答