【问题标题】:The graphics is drawing on top of the UI, in java swing,图形绘制在 UI 之上,在 java swing 中,
【发布时间】:2014-01-22 03:20:37
【问题描述】:

当我在 paint() 方法中(通过继承 JPanel)在 Jpanel 上绘图时
图形出现在我的按钮和其他 UI 组件的顶部,
在组件不可见时, 那么如何在图形之上绘制组件

【问题讨论】:

  • 请显示代码,否则不会发生。另外,你不应该重写 JPanel 的 paint 方法,而应该重写它的 paintComponent 方法,并且你应该确保在 override 中调用 super 方法。
  • 我正在扩展 JPanel end 覆盖paint方法在背景上绘制图片,然后我将它用于面板添加按钮
  • 再次,要在背景上绘制图像,你不应该重写 JPanel 的paint 方法,而应该重写它的paintComponent 方法。这个不清楚怎么办?

标签: java swing jpanel paint


【解决方案1】:

首先查看Performing Custom PaintingPainting in AWT and Swing

绘制方法
适用于 AWT 轻量级组件的规则 也适用于 Swing 组件——例如,paint() 被调用 什么时候渲染——除了 Swing 进一步考虑了 paint() 调用三个单独的方法,在 以下顺序:

protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)

Swing 程序应该覆盖paintComponent(),而不是覆盖paint()。虽然 API 允许,但一般没有 覆盖paintBorder()paintComponents() 的理由(如果你这样做, 确保你知道你在做什么!)。这种分解使它更容易 让程序只覆盖它们所画的那部分 需要延长。例如,这解决了提到的 AWT 问题 以前调用 super.paint() 的失败阻止了任何 轻量级的孩子不会出现。

【讨论】:

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