【发布时间】:2013-11-29 14:09:41
【问题描述】:
我正在编写一个程序,我可以用它画出一些线条,而我正在测试Canvas 和awt.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。问题解决了。