油漆,重漆,油漆组件

The*_*wer 3 java user-interface swing

对不起,我经常搜索这三个函数(paint,repaint,paintComponent)如何在它们之间进行交互,但我不知道.你可以在他们被叫的时候准确地解释我(因为有时候java会在没有我问他的情况下调用它)他们究竟做了什么,他们之间有什么区别.谢谢

sco*_*eus 5

我不确定"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();

    }

}
Run Code Online (Sandbox Code Playgroud)

  • 请准确:a)_paintComponent()方法是JPanel_中的一个方法严格来说,错误:它是JComponent的一个方法,在JPanel中没有做任何额外的事情b)_adds所有组件(如JButtons,JTextFields和其他JPanels)使用Graphic_错误进入JPanel:相反,它被明确记录为负责绘制_itself_ - 它与绘制其子项无关(在paintChildren中完成) (2认同)