public class FaceComponent extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
Ellipse2D.Double head = new Ellipse2D.Double(5, 10, 100, 150);
Rectangle eye = new Rectangle(25, 70, 15, 15);
Line2D.Double mouth = new Line2D.Double(30, 110, 80, 110);
g2.setColor(Color.GREEN)
.fill(eye)
.eye.translate(50, 0);
.fill(eye)
.setColor(Color.RED)
.draw(mouth)
.setColor(Color.BLUE)
.drawString("Hello, World!", 5, 175);
}
}
有没有理由将对象g2上的方法链接起来导致错误“无法调用(方法)原始类型void,我可能会忽略它?
答案 0 :(得分:4)
你不能在Graphics对象上链接方法调用,因为它的方法调用不会返回Graphics对象,而是返回void。
变化
g2.setColor(Color.GREEN)
.fill(eye)
.eye.translate(50, 0);
.fill(eye)
.setColor(Color.RED)
.draw(mouth)
.setColor(Color.BLUE)
.drawString("Hello, World!", 5, 175);
到
g2.setColor(Color.GREEN);
g2.fill(eye);
g2.eye.translate(50, 0);
g2.fill(eye);
g2.setColor(Color.RED);
g2.draw(mouth);
g2.setColor(Color.BLUE);
g2.drawString("Hello, World!", 5, 175);
实际上,Graphics或Graphics2D方法都没有返回自身的实例。 create()
方法确实返回Graphics对象但不是同一个。快速浏览一下API会告诉你这一点,将来,我建议你这样做是为了类似的问题。
答案 1 :(得分:4)
方法setColor
,fill
等具有void返回类型,因此无法像这样链接,而是需要单独调用
g2.setColor(Color.GREEN);
g2.fill(eye);
...