java repaint 无效_repaint() 无效 求助 谢谢

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.geom.Ellipse2D;

import java.util.ArrayList;

import javax.swing.*;

public class Bounce {

/**

* @param args

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

BallFrame f = new BallFrame();

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setLocationRelativeTo(null);

f.setVisible(true);

}

});

}

}

class BallFrame extends JFrame {

private Timer timer;

private Action start, stop;

private PaintPanel panel;

public BallFrame() {

setTitle("Ball");

panel = new PaintPanel();

panel.addBall(new Ball(20, 20));

panel.setPreferredSize(new Dimension(500, 400));

getContentPane().add(panel, BorderLayout.CENTER);

timer = new Timer(10, panel);

JPanel control = new JPanel(); // FlowLayout(FlowLayout.CENTER)

start = new AbstractAction("Start") {

@Override

public void actionPerformed(ActionEvent e) {

if( !timer.isRunning() )

timer.start();

start.setEnabled(false);

stop.setEnabled(true);

}

};

stop = new AbstractAction("Stop") {

@Override

public void actionPerformed(ActionEvent e) {

if( timer.isRunning() )

timer.stop();

start.setEnabled(true);

stop.setEnabled(false);

}

};

stop.setEnabled(false);

control.add(new JButton(start));

control.add(new JButton(stop));

getContentPane().add(control, BorderLayout.SOUTH);

pack();

}

}

class Ball {

private int x, y, dx = 1, dy = 1; //dx,dy 是移动的量· x,y 是坐标

public Ball(int x, int y) {

this.x = x;

this.y = y;

}

public void move(int x_max, int y_max) {

x += dx;

y += dy;

if( x < 0 ) {

dx = -dx;

x += 2 * dx;

}

if( y < 0 ) {

dy = -dy;

y += 2 * dy;

}

if( x > x_max ) {

dx = -dx;

x += 2 * dx;

}

if( y > y_max ) {

dy = -dy;

y += 2 * dy;

}

}

public Ellipse2D getShape() {

return new Ellipse2D.Double(x, y, 20, 20);

}

}

class PaintPanel extends JComponent implements ActionListener {

private java.util.List balls = new ArrayList();

public void addBall(final Ball b) {

if( b == null )

return;

if( EventQueue.isDispatchThread() )

balls.add(b);

else {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

addBall(b);

}

});

}

}

@Override

public void paintComponent(Graphics g) {

@SuppressWarnings("unchecked")

Graphics2D g2 = (Graphics2D)g.create();

g2.setColor(Color.BLUE);

for(Ball b : balls)

g2.fill(b.getShape());

g2.dispose();

}

@Override

public void actionPerformed(ActionEvent e) {

for(Ball b : balls)

b.move(getWidth(), getHeight());

repaint();

}

}

@Deprecated

class Run implements Runnable {

int height = 0, width = 0;

Ball ball;

Component c;

PaintPanel p;

BallFrame bf;

public Run(Ball ball, PaintPanel p) {

this.ball = ball;

this.c = p;

}

@Override

public void run() {

System.out.println("进入线程?");

BallFrame ballFrame = new BallFrame();

height = ballFrame.getHeight();

width = ballFrame.getWidth();

for(int i = 1; i < 100; i++) {

try {

System.out.println("move " + i);

ball.move(width, height);

c.repaint();

Thread.sleep(1);

}

catch(InterruptedException e) {

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值