【问题标题】:Unable to draw over a JPanel无法在 JPanel 上绘图
【发布时间】:2015-04-23 04:22:00
【问题描述】:

我正在尝试在 JPanel 上绘图。当函数drawField 被调用时,它什么也不画。可能是什么原因?

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

从主类构造函数调用。

【问题讨论】:

  • 您确定您的 JPanel 实际上包含在 JFrame 或其他等效项中吗?
  • jPanel2.getGraphics(); 这不是进行自定义绘画的正确方法!请参阅Performing Custom Painting 了解如何正确操作。

标签: java swing awt graphics2d


【解决方案1】:

覆盖面板上的paintComponent 方法。

您不能在构造函数中使用JPanel。现在不适合这样做,一旦面板被绘制,您绘制的任何内容都会被覆盖。一旦它变得可见,就会发生这种情况,因此您永远不会看到您绘制的内容。

相反,像这样覆盖paintComponent 方法:

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.drawLine(0, 0, 100, 100);
}

作为绘制面板本身的过程的一部分,在事件调度线程上调用此方法。每次需要重新绘制面板内容时都会调用此方法,因此您可以放心,您的线条将始终显示出来。

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

【讨论】:

  • g 转换为Graphics2D 是唯一的方法吗?因为构造函数不接受Graphics2D g作为参数。
  • g 转换为Graphics2D 是处理此问题的标准方法。 java编译器不会抱怨的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多