问答题
本题程序的功能是:主窗口中有两个按钮“Start”和“Close”,单击按钮“Start”后会在窗口左上角生成一个黑色实心小球,小球做斜线运动,碰到面板边缘后反弹几次后停止运动,再次单击按钮“Start”后又会生成一个小球做同样的运动。程序中存在若干错误,请找出并改正(注意:不得改动程序的结构,不得增行或删行)。 import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.*; import javax.swing.*; public class advance public static void main (String[] args) JFrame frame = new BounceFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.show(); class BounceFrame extends JFrame public BounceFrame() setSize(WIDTH,HEIGHT); setTitle("advance"); Container contentPane = getContentPane(); Canvas = new BallCanvas(); contentPane.add(canvas,BorderLayout.CENTER); JPanel buttonPanel = new JPanel(); addButton(buttonPanel,"Start",new ActionListener() public void actionPerformed(ActionEvent evt) addBall(); ); addButton(buttonPanel,"Close",new ActionListener() public void actionPerformed(ActionEvent evt) System.exit (0); ); contentPane.add(buttonPanel,BorderLayout.SOUTH); public void addButton(Container c,String title,Listener listener) JButton button = new JButton(title); c.add(button); button.addActionListener(listener); public void addBall() try Ball b = new Ball(canvas); canvas.add(b); for (int i = 1;i <= 1000; i++) b.move (); Runnable.sleep (5); catch (InterruptedException exception) private BallCanvas canvas; public static final int WIDTH = 450; public static final int HEIGHT = 350; class BallCanvas extend JPanel public void add(Ball b) balls.add(b); public void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; for (int i = 0; i < balls.size(); i++) Ball b = (Ball)balls.get(i); b.draw(g2); private ArrayList balls = new ArrayList(); class Ball public Ball(Component c) canvas = c; public void draw(Graphics2D g2) g2.fill(new Ellipse2D.Double(x,y,XSIZE,YSIZE)); public void move() x += dx; y += dy; if(x < 0) x = 0; dx = -dx; if(x+XSIZE >= canvas.getWidth()) x = canvas.getWidth() - XSIZE; dx = -dx; if(y < 0) y = 0; dy = -dy; if (y+YSIZE >= canvas.getHeight()) y = canvas.getHeight() - YSIZE; dy = -dy; canvas.paint(canvas.getGraphics()); private Component canvas; private static final int XSIZE = 15; private static final int YSIZE = 15; private int x = 0; private int y = 0; private int dx = 2; private int dy = 2;
【正确答案】 第39行的public void addButton(Container c,String title,Listener listener)改为public void addButton(Container c,String title,ActionListener listener)。 第54行的Runnable.sleep (5)改为Thread.sleep(5)。 第66行的class BallCanvas extend JPanel 改为 class BallCanvas extends JPanel。
【答案解析】
提交答案
关闭