/***************MovingComponent****/importjava.awt.Color;importjava.awt.Graphics;importjavax.swing.JComponent;publicclassMovingComponent2extendsJComponent{privateintx;pri...
/***************MovingComponent****/
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
public class MovingComponent2 extends JComponent {
private int x;
private int y;
private final int RIGHT = 0;
private final int LEFT = 1;
private static final int WIDTH = 50;
private static final int HEIGHT = 50;
private int direction;
public MovingComponent2() {
x = 0;
y = 0;
direction = 1;
}
public void paintComponent(Graphics g) {
g.setColor(Color.GREEN);
g.fillOval(x, y,WIDTH, HEIGHT);
}
public void move() {
int height = getHeight();
int width = getWidth();
if(direction==1){
x+=2;
y+=2;
if(y+HEIGHT>=height){
x+=2;
y-=2;
if(x+WIDTH>=width){
direction=0;
}
}
}
else if(direction==0){
x-=2;
// y-=2;
if(x<=0){
direction=1;
}
}
repaint();
}
}
/********MovingFrame********/import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.Timer;public class MovingFrame extends JFrame{private MovingComponent box;public MovingFrame(){box = new MovingComponent();add(box);setSize(800,600);TimerListener listener = new TimerListener();Timer t = new Timer(10,listener);t.start();}class TimerListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent event) {box.move();}}}/************tester*****************/import javax.swing.JFrame;public class MovingTester {public static void main(String args[]){JFrame frame = new MovingFrame();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setTitle("Moving Box!");}}
如果把方块换成球形,使它沿对角线移动,一旦到达最低端或者最右边反弹,我试了很久,就是达不到那种效果。求
展开