由于我没有学过swing所以书上的例子我不知道错在哪里~
我运行的结果是只弹出一个窗体 里面什么都没有
而书上说的效果图是有一个start的按钮和一个close按钮以及一个会动的小球
下面给出代码求大神帮忙看看
- Java code
package com.coreJava.multithreading;import java.awt.BorderLayout;import java.awt.Container;import java.awt.EventQueue;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class Bounce { public static void main(String[] args){ EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame=new BounceFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } }class BounceFrame extends JFrame{ /** * */ private static final long serialVersionUID = 8985838171214084208L; private BallComponent comp; private static final int DEFAULT_WIDTH=450; private static final int DEFAULT_HEIGHT=350; private static final int STEPS=1000; private static final int DELAY=3; public BounceFrame(){ setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); setTitle("Bounce"); comp=new BallComponent(); add(comp,BorderLayout.CENTER); JPanel buttonPanel=new JPanel(); addButton(buttonPanel, "Start", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { addBall(); } }); addButton(buttonPanel, "Close", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public void addButton(Container c,String title,ActionListener listener){ JButton button=new JButton(title); c.add(button); button.addActionListener(listener); } public void addBall(){ Ball ball=new Ball(); comp.add(ball); for (int i = 1; i <=STEPS; i++) { ball.move(comp.getBounds()); comp.paint(comp.getGraphics()); try { Thread.sleep(DELAY); } catch (InterruptedException e) { e.printStackTrace(); } } } }
- Java code
package com.coreJava.multithreading;import java.awt.Graphics;import java.awt.Graphics2D;import java.util.ArrayList;import javax.swing.JPanel;public class BallComponent extends JPanel{ private ArrayList<Ball> balls=new ArrayList<Ball>(); public void add(Ball b){ balls.add(b); } public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2=(Graphics2D)g; for (Ball b : balls) { g2.fill(b.getShape()); } } }
- Java code
package com.coreJava.multithreading;import java.awt.geom.Ellipse2D;import java.awt.geom.Rectangle2D;public class Ball { private static final int XSIZE=15; private static final int YSIZE=15; private double x=0; private double y=0; private double dx=1; private double dy=1; public void move(Rectangle2D bounds){ x+=dx; y+=dy; if(x<bounds.getMinX()){ x=bounds.getMaxX(); dx=-dx; } if(x+XSIZE>=bounds.getMaxX()){ x=bounds.getMaxX()-XSIZE; dx=-dx; } if(y<bounds.getMinY()){ y=bounds.getMinY(); dy=-dy; } if(y+YSIZE>=bounds.getMaxY()){ y=bounds.getMaxY()-YSIZE; dy=-dy; } } public Ellipse2D getShape(){ return new Ellipse2D.Double(x,y,XSIZE,YSIZE); } }