【问题标题】:Paint, repaint , paintComponent绘制、重绘、绘制组件
【发布时间】:2013-07-24 00:28:36
【问题描述】:

对不起,我搜索了很多以找到这 3 个函数(绘画、重绘、绘画组件)如何在它们之间进行交互,但我不知道。你能准确地解释我什么时候调用它们(因为有时java会在我不问他的情况下调用它)它们到底做了什么以及它们之间有什么区别。谢谢

【问题讨论】:

  • paint 用于 AWT 组件或 UI delagate,paintComponent 用于 Swing JComponent,重绘(以编程方式)从 (Swing) 计时器或 LayoutManager 的通知器刷新 JComponent,revalidate() 需要重绘(删除后,添加,重新布局)

标签: java swing user-interface


【解决方案1】:

“paint”我不太清楚,但我可以解释一下 repaint() 和 paintComponent() 之间的关系。

在我有限的 java 经验中,paintComponent() 方法是 JPanel 类中的一个方法,并且是“swing”的成员。

paintComponent() 方法处理所有的“绘画”。本质上,它使用 Graphic 对象将您想要的任何内容绘制到 JPanel 中。

repaint() 是所有 JPanel 对象的继承实例方法。调用 [your_JPanel_object].repaint() 调用 paintComponent() 方法。

每次您希望更改 JPanel 的外观时,都必须调用 repaint()。

某些动作会自动调用 repaint() 方法:

  • 调整窗口大小
  • 最小化和最大化您的窗口

仅举几例。

IN SHORT paintComponent() 是在 JPanel 或您自己的扩展 JPanel 的自定义类中定义的方法。 repaint() 是在另一个类(如 JFrame)中调用的方法,最终调用paintComponent()。

这是一个例子:

    public class MyPanel extends JPanel{

    public void paintComponent(Graphics g){
        super.paintComponent(g);

        g.draw([whatever you want]);

        ...
        ...

    }
}
public class MyFrame extends JFrame{

    public MyFrame(){

    MyPanel myPanel = new MyPanel();

    myPanel.repaint();

    }

}

【讨论】:

  • 请准确:a) paintComponent() 方法是 JPanel 中的方法 严格来说,错误:它是 JComponent 的方法,在 JPanel 中没有额外的操作 b) 使用 Graphic 将所有组件(例如 JButton、JTextField 和其他 JPanel)添加到 JPanel 中错误:相反,它被明确记录为负责绘制本身 - 它与绘制它的孩子无关(在paintChildren中完成)
  • 那为什么不直接调用paintComponent()呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 2023-03-07
  • 2012-05-26
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多