Java 如何将图形线制作成JFrame?

Java 如何将图形线制作成JFrame?,java,swing,graphics,Java,Swing,Graphics,我使用Eclipse,并希望通过以下代码在JFrame中生成一条图形线: public void Makeline () { Graphics g=new Graphics(); // has error Graphics2D g2 = (Graphics2D) g; g2.draw(new Line2D.Double(0, 0, 20, 20)); } 但请给出以下错误信息: Cannot instantiate the type Graphics 解决方案是覆盖p

我使用Eclipse,并希望通过以下代码在JFrame中生成一条图形线:

public void Makeline () {
    Graphics g=new Graphics(); // has error
    Graphics2D g2 = (Graphics2D) g;
    g2.draw(new Line2D.Double(0, 0, 20, 20));
}
但请给出以下错误信息:

Cannot instantiate the type Graphics

解决方案是覆盖paintComponent方法,但JFrame不是JComponent,因此使用JPanel代替JFrame,然后将JPanel添加到JFrame中

paintComponent(Graphics g) {
    super.paintComponent(g)

    //here goes your code
    Graphics2D g2 = (Graphics2D) g;
    ...
}

解决方案是覆盖paintComponent方法,但JFrame不是JComponent,因此使用JPanel代替JFrame,然后将JPanel添加到JFrame中

paintComponent(Graphics g) {
    super.paintComponent(g)

    //here goes your code
    Graphics2D g2 = (Graphics2D) g;
    ...
}

图形是一个抽象类。您不能按以下方式实例化

 Graphics g=new Graphics(); 
要访问
Graphics2D
,首先需要覆盖
paint(Graphics)
方法

@Override
public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
}

图形是一个抽象类。您不能按以下方式实例化

 Graphics g=new Graphics(); 
要访问
Graphics2D
,首先需要覆盖
paint(Graphics)
方法

@Override
public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
}

Graphics
是一个抽象类,定义了整个API的需求

Swing中的绘制是在绘制链的上下文中完成的。这通常在从
JComponent

请查看以了解更多详细信息


您也可以使用
BufferdImage
来生成
图形
上下文,但您仍然需要在某个地方绘制图像,因此它可以反映您试图实现的目标。

图形
是一个抽象类,定义了整个API的需求

Swing中的绘制是在绘制链的上下文中完成的。这通常在从
JComponent

请查看以了解更多详细信息


您也可以使用
BufferdImage
生成
Graphics
上下文,但您仍然需要某个地方来绘制图像,因此它会记录您要实现的目标。

图形是抽象的,您必须通过实现所需的方法来扩展它。图形是抽象的,您必须通过实现所需的方法来扩展它。否。1-通常,应避免覆盖油漆,尤其是顶层容器。2-您应该始终致电super.paintXxxNo。1-通常,应避免覆盖油漆,尤其是顶层容器。2-你应该经常打电话给super。paintXxx@SamieyMehdi您是如何实施的?@SamieyMehdi我的评论不是对您的问题的回答,而是对改进此答案的建议。@SamieyMehdi从通读@SamieyMehdi开始,您没有,当重绘管理器决定需要更新组件时,它会自动为您调用。花点时间通读我在上一篇评论和文章中链接的教程answer@SamieyMehdi您是如何实施的?@SamieyMehdi我的评论不是对您的问题的回答,而是对改进此答案的建议。@SamieyMehdi从通读@SamieyMehdi开始,您没有,当重绘管理器决定需要更新组件时,它会自动为您调用。花点时间通读我在之前的评论和回答中链接的教程