关于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方法中去定义就行了。。。
问题是解决了,但我还不知道这是怎么回事。。。为什么不在方法内定义就出那个问题。。。。
谁能解释一下为什么在类中定义就出那个问题么?能解释的话照样给分。 展开
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方法中去定义就行了。。。
问题是解决了,但我还不知道这是怎么回事。。。为什么不在方法内定义就出那个问题。。。。
谁能解释一下为什么在类中定义就出那个问题么?能解释的话照样给分。 展开
1个回答
展开全部
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);
}
}
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。所以才会出现问题。这个就是实例变量跟本地变量的区别
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询