问题:The method add(String, Component) in the type Container......

nihao很快乐 2014-04-21 09:06:15
程序1:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Bounce {

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame=new BounceFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

}
});

}

}

class BounceFrame extends JFrame
{
public BounceFrame()
{
setSize(DEFAULT_WIDTH,DEFAULT_HEIGH);
setTitle("Bounce");
comp=new BallComponent();
add(comp,BorderLayout.CENTER);
JPanel buttonPanel=new JPanel();
addButton(buttonPanel,"Start",new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
addBall();
}
});
addButton(buttonPanel,"Close",new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
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()
{
try
{
Ball ball=new Ball();
comp.add(ball);
for(int i=1;i<=STEPS;i++)
{
ball.move(comp.getBounds());
comp.paint(comp.getGraphics());
Thread.sleep(DELAY);
}
}catch(InterruptedException e)
{}
}


private BallComponent comp;
public static final int DEFAULT_WIDTH=450;
public static final int DEFAULT_HEIGH=350;
public static final int STEPS=1000;
public static final int DELAY=3;
}
程序2:
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;


public class Ball {

public void move(Rectangle2D bounds)
{
x+=dx;
y+=dy;
if( x <bounds.getMinX())
{
x=bounds.getMinX();
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);
}
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;

}
程序3:

import java.awt.*;
import java.util.*;
import javax.swing.*;
public class BallComponent {
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());

}
}
private ArrayList<Ball> balls=new ArrayList<Ball>();
}
在程序1中红色部分是有错误的,报错信息如下:
The method add(String, Component) in the type Container is not applicable for the arguments (BallComponent, String)
The method getBounds() is undefined for the type BallComponent
The method getGraphics() is undefined for the type BallComponent
请问为什么会报着几个错误,该如何进行修改?
在程序3中红色部分也是有错误的,不知道出错原因是什么?
请高人帮忙解答一下,非常感谢。
因为下面写不了了,只有在这儿写了,经过下面的修改后,再在程序1中加一行代码add(comp,BorderLayout.CENTER);就OK 了
...全文
2368 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nihao很快乐 2014-04-21
  • 打赏
  • 举报
回复
把add(comp,BorderLayout.CENTER);改成add(buttonPanel,BorderLayout.CENTER);后,“Start”,"Close"按钮出现了。但是那个球还是出现不了,继续更改代码,如有大神知道原因可以不吝赐教。
nihao很快乐 2014-04-21
  • 打赏
  • 举报
回复
上面的三个问题虽然解决了,但是运行后发现界面上没有“Close” 和“Start”按钮,不晓得为什么?
nihao很快乐 2014-04-21
  • 打赏
  • 举报
回复
找到问题的原因了,把程序3中的BallComponent类需要继承于JPanel类,改成如下public class BallComponent extends JPanel {}后,这三个问题就迎刃而解了。

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧