【问题标题】:Why won't any line appear?为什么不会出现任何线条?
【发布时间】:2013-11-29 14:09:41
【问题描述】:

我正在编写一个程序,我可以用它画出一些线条,而我正在测试Canvasawt.Frame 是如何合作的。代码如下:

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.ArrayList;

public class Drawing extends Canvas{

    Point2D pt1, pt2;
    private ArrayList<Shape> linesList;
    private Shape shape = null;
    public Drawing(){
        linesList = new ArrayList<Shape>();

        Point p1 = new Point();p1.x = 200;p1.y = 200;
        Point p2 = new Point();p2.x = 300;p2.y = 300;

        pt1 = (Point2D) p1;
        pt2 = (Point2D) p2;
        //Line k = new Line(p1,p2,Color.BLUE);
        shape = new Line2D.Double ( pt1, pt2 );
        linesList.add(shape);
    }

    public void paint(Graphics g){
        Graphics2D g2d = (Graphics2D) g;

        //g2d.drawLine(200, 200, 200, 300);
        //Shape k = null;
        //k = new Shape();
        //g2d.setPaint(Color.BLACK );
        g2d.setColor(Color.GREEN);
        for ( Shape line : linesList )
        {   
            g2d.draw(line);          
        }   
    }

    public static void main(String[] args){
        Frame f = new Frame("Rysuje");

        f.setResizable(false);
        f.setSize(600, 600);
        f.setVisible(true);
        Drawing myFrame = new Drawing();

        f.add(myFrame);
    }
}

我的问题是:为什么paint() 方法中的g2d.draw(line); 不画线?实际上它什么也没画。但是当我写g2d.drawLine(200, 200, 200, 300); 时,它可以工作......

【问题讨论】:

  • 1) 为什么选择 AWT 而不是 Swing?请参阅Swing extras over AWT 上的此答案,因为有很多放弃使用 AWT 组件的充分理由。如果您需要支持较旧的基于 AWT 的 API,请参阅 Mixing Heavyweight and Lightweight Components。 2) 源代码中的一个空白行总是就足够了。 { 之后或} 之前的空行通常也是多余的。
  • “为什么g2d.draw(line);paint() 方法中没有画线?” 我在这里看到一条绿线..
  • 1) 我知道 Swing 更好,但这是我班上的一项练习,所以我别无选择。 2) 对不起-我很着急。如果您看到一条绿线,则它是在paint() 中的 for 循环之前绘制的线;仍然不明白为什么 for 循环不能按预期执行并从 ArrayList. 中画一条线
  • “这是我班上的一个练习,所以我别无选择。”我的同情。 OTOH 我确实有一个选择,并且有比帮助不应使用的 API 更好的事情要做。祝你好运。
  • "OTOH 我确实有一个选择,并且有比帮助不应使用的 API 更好的事情要做。"我尊重。你能写出为什么不应该使用 AWT 吗?只是一两个简短的争论,所以我可以问我的老师。 PS。问题解决了。

标签: java canvas awt frame


【解决方案1】:

使用这个来源..

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.ArrayList;

public class Drawing extends Canvas{

    Point2D pt1, pt2;
    private ArrayList<Shape> linesList;
    private Shape shape = null;
    public Drawing(){
        linesList = new ArrayList<Shape>();

        Point p1 = new Point();p1.x = 200;p1.y = 200;
        Point p2 = new Point();p2.x = 300;p2.y = 300;

        pt1 = (Point2D) p1;
        pt2 = (Point2D) p2;
        //Line k = new Line(p1,p2,Color.BLUE);
        shape = new Line2D.Double ( pt1, pt2 );
        linesList.add(shape);
    }

    public void paint(Graphics g){
        Graphics2D g2d = (Graphics2D) g;

        g2d.setColor(Color.RED);
        g2d.drawLine(20, 20, 100, 100);
        //Shape k = null;
        //k = new Shape();
        //g2d.setPaint(Color.BLACK );
        g2d.setColor(Color.GREEN);
        for ( Shape line : linesList )
        {
            g2d.draw(line);
        }
        g2d.setColor(Color.BLUE);
    }

    public static void main(String[] args){
        Frame f = new Frame("Rysuje");

        f.setResizable(false);
        f.setSize(400, 400);
        f.setVisible(true);
        Drawing myFrame = new Drawing();

        f.add(myFrame);
    }
}

..我看到了:

现在在我看来,绿线 出现了,所以我对您期望看到的不同之处感到有些困惑。你看到同样的东西吗?

【讨论】:

  • 我看到的和你看到的一样。我认为我的 NetBeans 产生了问题。谢谢!
  • 是的,在您发布代码之前,我在评论中写了这个。无论如何,感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 2018-09-02
相关资源
最近更新 更多