Java 无法提取JPanel

Java 无法提取JPanel,java,swing,awt,graphics2d,Java,Swing,Awt,Graphics2d,我正试图画一张JPanel。调用函数drawField时,它不绘制任何内容。原因可能是什么 private void drawField() { try { Graphics2D field = (Graphics2D) jPanel2.getGraphics(); field.drawLine(0, 0, 100 , 100); }catch(Exception exc) { exc.printStackTrace();} } 它是从主类构造函

我正试图画一张JPanel。调用函数
drawField
时,它不绘制任何内容。原因可能是什么

private void drawField() {
    try {
        Graphics2D field = (Graphics2D) jPanel2.getGraphics();
        field.drawLine(0, 0, 100 , 100);
    }catch(Exception exc) { exc.printStackTrace();}
}

它是从主类构造函数调用的。

覆盖面板上的
paintComponent
方法。

您不能在构造函数中绘制
JPanel
。现在是进行此操作的适当时机,绘制面板后,您绘制的任何内容都将被覆盖。一旦它被显示,就会发生这种情况,所以你永远不会看到你画的东西

相反,如下所示重写
paintComponent
方法:

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.drawLine(0, 0, 100, 100);
}
在绘制面板本身的过程中,在事件分派线程上调用此方法。每次需要再次绘制面板的内容时,都会调用此方法,因此您可以确保您的线条始终显示出来


如果背景为黑色,请记住将绘图颜色设置为不同的颜色,因为它将默认为该颜色。

覆盖面板上的
paintComponent
方法。

您不能在构造函数中绘制
JPanel
。现在是进行此操作的适当时机,绘制面板后,您绘制的任何内容都将被覆盖。一旦它被显示,就会发生这种情况,所以你永远不会看到你画的东西

相反,如下所示重写
paintComponent
方法:

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.drawLine(0, 0, 100, 100);
}
在绘制面板本身的过程中,在事件分派线程上调用此方法。每次需要再次绘制面板的内容时,都会调用此方法,因此您可以确保您的线条始终显示出来


如果背景为黑色,请记住将绘图颜色设置为不同的颜色,因为它将默认为该颜色。

您确定您的JPanel实际上包含在JFrame或其他等效内容中吗?
jPanel2.getGraphics()这不是定制绘画的正确方式!有关如何正确执行此操作,请参阅。您确定您的JPanel实际上包含在JFrame或类似的东西中吗?
jPanel2.getGraphics()这不是定制绘画的正确方式!有关如何正确操作,请参阅。将
g
转换为
Graphics2D
是唯一的方法吗?因为构造函数不接受
Graphics2D g
作为参数。将
g
转换为
Graphics2D
是处理此问题的标准方法。java编译器不会对此抱怨。将
g
转换为
Graphics2D
是唯一的方法吗?因为构造函数不接受
Graphics2D g
作为参数。将
g
转换为
Graphics2D
是处理此问题的标准方法。java编译器不会对此抱怨。