我使用NetBeans和最新版本的JDK。由于某种原因,没有Graphics.draw()
方法,虽然java.awt.geom.Line2D
和java.awt.Graphics2D
是导入的。我怎么画一个Line2D.Double
元素?
Shape pLine;
private void playerDraw(){
Graphics g2 = getGraphics();
pLine = new Line2D.Double(px, py, Math.cos(angle)*10+px,Math.sin(angle)*10+py);
g2.drawRect(px-5, py-5, 10, 10);
g2.draw(pLine); //this doesn't compile(cannot find symbol)
}
您的主要问题是,您正在使用图形对象,就好像它是一个Graphics2D对象,但它不是,并且正如图形类Java API条目将向您展示的那样,图形类没有绘制方法,而Graphics2D有。我想你漏掉了一个关键行,比如:
Graphics g = getGraphics();
Graphics2D g2 = (Graphics2D) g; // the missing line
但是已经说过,你使用图形不正确,因为你应该避免通过调用getGraphics()
在Swing组件上获得它,因为这会给你一个不稳定的短寿命图形对象,其使用风险导致短寿命图像或nullpointerexception,而是你应该在JComponent的paintComponent(Graphics g)
方法内进行绘图。
您错过了在class中声明line变量:
。
public class Example
{
public Line2D.Double pLine;
private void playerDraw(){
Graphics g2 = getGraphics();
pLine = new Line2D.Double(px, py,Math.cos(angle)*10+px,Math.sin(angle)*10+py);
g2.drawRect(px-5, py-5, 10, 10);
g2.draw(pLine); //this doesn't compile(cannot find symbol)
}
}