【问题标题】:Where to place the drawing code in a JPanel used as canvas在用作画布的 JPanel 中放置绘图代码的位置
【发布时间】:2014-12-12 13:02:21
【问题描述】:

我有一个 JPanel,我在其中使用鼠标事件进行绘制,在调整大小或最小化恢复它之后,它不显示必须绘制的内容,尽管显示了“degub”println我正在调用该函数,但由于某种原因,它仍然为空白

我认为我应该在 paintComponent 函数中添加我的绘图函数,但它似乎不能正常工作,所以我做错了什么或者我应该将 drawElements() 调用放在哪里?

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    drawElements();
}
void drawElements() {
    Graphics2D g = (Graphics2D)this.getGraphics();
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
            RenderingHints.VALUE_ANTIALIAS_ON);

    for (Element el : elements) {
        el.draw(g);
    }
}

【问题讨论】:

  • 请发布一个可运行的示例
  • 另外,我不知道 drawElements() 是如何工作的,因为您没有将 Graphics 对象传递给该方法。
  • 它与绘图过程无关,因为在鼠标单击时它会绘制单个元素并且它工作得很好。如果我替换绘图一个元素来绘制它们,它也可以工作。所以这与我不理解的内部工作方式有关
  • 将图形对象传递给drawElements方法
  • 确实,@rafalopez79 的建议是正确的答案。我用一个简单的例子重现了你的确切问题,并传递了图形对象而不是调用 getGraphics() 来修复它。

标签: java swing canvas jpanel paintcomponent


【解决方案1】:

将图形对象传递给 drawElements 方法。

(@rafalopez79 提供的正确答案)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多