Java 如何在JPanel中绘制图形?

Java 如何在JPanel中绘制图形?,java,swing,graphics,paintcomponent,Java,Swing,Graphics,Paintcomponent,我需要在Java中的JPanel中绘制一些线,我试图在paintComponent()方法之外的另一个方法中绘制它们,以从另一个类调用它,但我遇到了一个问题,因为绘制图形需要graphics对象,我尝试使用this.getGraphics()但对我不起作用: public class Panel extends JPanel{ public void drawLine(int x1, int y1, int x2, int y2){ this.getGraphics().

我需要在Java中的
JPanel
中绘制一些线,我试图在
paintComponent()
方法之外的另一个方法中绘制它们,以从另一个类调用它,但我遇到了一个问题,因为绘制图形需要
graphics
对象,我尝试使用
this.getGraphics()
但对我不起作用:

public class Panel extends JPanel{
    public void drawLine(int x1, int y1, int x2, int y2){
        this.getGraphics().drawLine(x1, y1, x2, y2);
    }
}
有什么建议吗

“有什么建议吗?”

面板
类中保留对象列表。(
列表

paintComponent
方法中遍历列表

Graphics2D g2 = (Graphics2D)g;
for (Line2D line : lines) {
    g2.draw(line);
}
然后您可以使用一个方法
addLine(line2dline)
,将一行添加到列表中并
repaint()
s


“如何在JPanel中使用paintComponent方法绘制图形?”


不要。所有自定义绘制都应在
paintComponent
方法中提供的
Graphics
对象的上下文中完成。所以你需要预测可能画出什么,然后画出来。如上所述,这可以是动态的。

thx它工作得很好,但是当我从集合中删除一些行并重新绘制时,它不会更新修改,也没有任何建议吗?您需要确保在
paintComponent
方法的开头调用
super.paintComponent
public void addLine(Line2D line) {
    lines.add(line);
    repaint();
}