关于JAVA画图的一个问题

publicclassTestextendsJFrame{Test(){add(newass());}publicstaticvoidmain(String[]args)... public class Test extends JFrame{
Test(){
add(new ass());
}

public static void main(String[] args){
JFrame frame = new Test();
frame.setTitle("Test");
frame.setSize(800, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

class ass extends Testsss{
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
}
}

class Testsss extends JPanel{

private Polygon p = new Polygon();
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
for(int i = 200; i <= 700; i+= 100)
p.addPoint(i, (int)(0.001 * (getSize().width - i) * (getSize().width - i)));
g.drawPolyline(p.xpoints, p.ypoints, p.npoints);
}
}

我想画的是折线(代码最后一行),但画出来的却是多边形。不知道为什么会把最后一个点和第一个点给连起来了。。。
还有就是,用鼠标拖动改变框架大小时,原来的图形不会消失,新的图形会和原来的图形一起出现在面板。。。

什么情况?怎么解决?
问题已经解决了。

把Testsss类中的 Polygon p 的定义改到 paintComponent方法中去定义就行了。。。

问题是解决了,但我还不知道这是怎么回事。。。为什么不在方法内定义就出那个问题。。。。

谁能解释一下为什么在类中定义就出那个问题么?能解释的话照样给分。
展开
 我来答
yujingtaojing
2011-03-15 · TA获得超过467个赞
知道小有建树答主
回答量:1108
采纳率:0%
帮助的人:491万
展开全部
public class Test extends JFrame {

Test() {
add(new Testsss());
}

public static void main(String[] args) {
JFrame frame = new Test();
frame.setTitle("Test");
frame.setSize(800, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

class Testsss extends JPanel {

private Polygon p = new Polygon();

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 200; i <= 700; i += 100) {
p.addPoint(i, (int) (0.001 * (getSize().width - i) * (getSize().width - i)));
}
g.drawPolyline(p.xpoints, p.ypoints, p.npoints);
}
}
更多追问追答
追问
你这样也不行。我试过了。
追答
因为,你在改变框架大小后,系统会重新调用这个painCompenent方法,如果你的p的方法里面,那么每次改变,p都是新的对象,如果p放在方法外面,每次改变框架大小的时候,都是对原来的这个p进行add。所以才会出现问题。这个就是实例变量跟本地变量的区别
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式