【问题标题】:Drawing a class that extends JPanel绘制一个扩展 JPanel 的类
【发布时间】:2013-04-16 02:46:33
【问题描述】:

我有一个扩展 JPanel 的类,它包含一个 draw(Graphics page) 方法来绘制自己。如果我正在构建一个测试驱动程序并想在框架上显示它我应该使用什么。我很困惑在paint()、paintComponent()、getGraphics() 等之间。

班级

class Car extends JPanel {

     void draw (Graphics page) {
         ....draw polygons...
     }

*编辑*

目标是让汽车在屏幕上移动,我将绘制方法更改为“paintComponent()”,它就出现了!但它需要移动它并用计时器重新绘制它。所以我想一遍又一遍地画它是它是draw()而不是paintComponent()的原因。 ?

【问题讨论】:

  • 阅读Swing Painting Tutorials -- 就在那里。你也可以在这个网站上搜索例子,因为它有很多例子,有些是我写的。如果您仍然卡住,请返回一个具体的可回答问题。
  • Performing Custom Graphics开始,然后看看2D Graphics,因为你显然还不够困惑,所以看看Painting in AWT and Swing
  • 你应该覆盖paintComponent,但你不应该手动调用它!
  • 你无法控制重绘过程,克服它。您可以通过调用repaint() 来请求重新绘制组件。看看this example
  • 还有this one...

标签: java swing jpanel awt paint


【解决方案1】:
  • paint()

    AWT 容器(使用 Swing)和 Swing 顶级容器,例如 JFrameJApplet(不要在顶级容器中绘制 - 添加 JPanelJComponent)。所以基本上,不要在这个时代改变方法。

  • paintComponent()

    绝大多数 Swing 组件。

  • getGraphics()

    BufferedImage(可能显示在 JLabel 中)。这将提供一个Graphics 实例,但我更喜欢将createGraphics() 用于Graphics2D 实例(渲染提示很棒)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多