大家好,我试试两个创建一个有两个球的程序。一个是正确的,一个正在下降。我有一个代码,但我不知道如何让另一个球落下......任何帮助都非常感谢...
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class move extends JPanel
{
Timer timer;
int x = 0, y = 10, width = 40, height = 40;
int radius = (width / 2);
int frXPos = 500;
int speedX = 1;
move()
{
ActionListener taskPerformer = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
if (x == 0)
{
speedX = 1;
}
if (x > (frXPos - width))
{
x=0;
}
x = x + speedX;
repaint();
}
};
timer = new Timer(2, taskPerformer);
timer.start();
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.red);
g.fillOval(x, y, width, height);
}
}
class MovingBall
{
MovingBall()
{
JFrame fr = new JFrame("Two Balls Moving Other Ways");
move o = new move();
fr.add(o);
fr.setVisible(true);
fr.setSize(500, 500);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[])
{
MovingBall movingBall = new MovingBall();
}
}
答案 0 :(得分:2)
不要试图让每个球都成为一个组件,而是使用一个绘图表面,以及一个持有/绘制/操纵每个球的状态的Ball类。然后有一个Ball对象列表。如this example中所示。
该示例使用了许多“相同”类型的Ball,它们都移动相同。但你可以做的是拥有一个抽象方法Ball
的超级抽象类move()
,并有两个独立的子类UpDownBall
,RightLeftBall
并覆盖move()
每个类的方法。
您还将在示例中注意List<Ball>
方法中paintComponent
的迭代方式。这就是你应该做的。
例如(扩展链接示例)
public interface Ball {
void drawBall(Graphics g);
void move();
}
public abstract class AbstractBall implements Ball {
protected int x, y, width, height;
...
@Override
public void drawBall(Graphics g) {
g.fillOval(x, y, width, height);
}
// getters and setters where needed
}
public class UpDownBall extends AbstractBall {
...
@Override
public void move() {
// change y position
}
}
public class RightLeftBall extends AbstractBall {
...
public void move() {
// change x position
}
}