【问题标题】:What is the use of Canvas in AWT?AWT 中 Canvas 有什么用?
【发布时间】:2013-06-16 09:15:11
【问题描述】:

我一直在搜索许多来源,但仍然找不到合适的解释。我为什么要使用它,它的目的是什么,为什么它与 JPanels 等不同?

【问题讨论】:

    标签: java swing jpanel awt java-2d


    【解决方案1】:

    据我了解,Canvas 只是 Swing 的 JComponent 的 AWT 版本。你不应该直接使用它,除非你正在制作一个纯 AWT 应用程序。 You can find more info here.

    【讨论】:

      【解决方案2】:

      Canvas 的特殊之处在于,它与 Window 一样,可以提供自定义的硬件加速双缓冲和页面翻转。见BufferStrategy

      基本上,画布是用来画画的。它还可以像 Panel 一样创建基于 AWT 的自定义组件,但与 Panel 不同的是它不能包含其他组件。

      【讨论】:

      • 我在回答中链接到的问题说您不应该在 Swing 应用程序中使用它。你同意吗?
      • @tieTYT:画布在 Swing 应用程序中可能不太有用,因为 Swing 提供了自己的双缓冲。 (传递给paintComponent 方法的Graphics 对象绘制到一个BufferedImage 上,该BufferedImage 稍后会显示在屏幕上。)还有一个问题是Swing 组件不能在AWT 组件前面分层。 Swing 菜单和工具提示通常也无法在画布上绘制,但您可以使用 JPopupMenu.setDefaultLightWeightPopupEnabled 和 ToolTipManager.setLightWeightPopupEnabled 来解决此问题。除此之外,如果你愿意,你当然可以在 Swing 中使用 Canvas。
      【解决方案3】:
      public class Canvas
      extends Component
      implements Accessible
      

      Canvas 组件表示屏幕的一个空白矩形区域,应用程序可以在该区域上进行绘制,或者应用程序可以从中捕获来自用户的输入事件。 应用程序必须继承 Canvas 类才能获得有用的功能,例如创建自定义组件。必须重写paint 方法才能在画布上执行自定义图形。

      基本上,画布是用来画画的。它还可以像 Panel 一样创建基于 AWT 的自定义组件,但与 Panel 不同的是它不能包含其他组件。

      【讨论】:

        猜你喜欢
        • 2014-09-07
        • 2010-09-29
        • 2012-01-27
        • 2017-05-04
        • 2014-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        相关资源
        最近更新 更多