2016-02-12 142 views
0

我在BasicStroke Outline = new BasicStroke(10f, 50, 50);中创建描边形状时遇到问题。我目前得到的错误是错误:创建描边形状

can't find symbol canvas.setStroke(Outline) pointing to the dot.

我是新来的构造函数,因此任何帮助将是巨大的,我做了类似这样的唯一的事情是创造的Scanner一个实例。

import javax.swing.JFrame; 
import java.awt.Graphics; 
import java.awt.Color; //sets color 
import java.awt.BasicStroke; 
import java.awt.Graphics2D; 
public class ColoredOlypmicRings extends JFrame 
{ 
//varriables go here 


public void paint(Graphics canvas) 
{ 
super.paint (canvas); 

canvas.setColor(Color.green); 
canvas.drawOval(100,100,100,100); //color green 
canvas.setColor(Color.red); 
canvas.drawOval(200,200,100,100); //color red 
final BasicStroke Outline = new BasicStroke(10f, 50, 50); 
canvas.setStroke(Outline); 

canvas.drawOval(300,300,200,200); 
} 

public ColoredOlypmicRings() 
{ 
setSize(600,400); 
setDefaultCloseOperation(EXIT_ON_CLOSE); 
} 

public static void main(String[] args) 
{ 
ColoredOlypmicRings guiWindow = new ColoredOlypmicRings(); 
guiWindow.setVisible(true); 
} 
} 
+0

查看样本示例:https://docs.oracle.com/javase/tutorial/2d/geometry/strokeandfill.html – YoungHobbit

回答

3

Graphics class不能处理笔画,并没有为它设置为its API会告诉你的方法。

另一方面,Graphics2D class可以处理这个类,应该用来处理它。因此将您的Graphics对象转换为Graphics2D对象。

例如,

@Override 
protected void paintComponent(Graphics g) { 
    Graphics2D g2 = (Graphics2D) g; 
    g2.setStroke(....); // do it here after casting 
} 

因为你没有正确使用构造,传递不正确的参数还检查了的BasicStroke API。

其他问题:

  • 不要在一个JFrame或其他顶级窗口直接绘制。
  • 改为在JFrame中显示的JPanel的paintComnponent方法中绘制。
  • 三个int BasicStroke构造函数被误用,因为第二个和第三个参数应该是代表Stroke对象的cap和join状态的常量。