为什么在Java swing中没有将新的Graphics对象传递给paintComponent方法?

时间:2014-01-14 02:01:31

标签: java swing graphics paintcomponent jcomponent

我正在阅读swing tutorial。从那里提到的:

The paintComponent method of JComponent is automatically called 
when a frame is drawn/re-drawn. 

但是,我不明白的是传递给它的Graphics Object是什么。我没有看到 任何Graphics类型的新对象为instanstiated并已通过。那么这一切是怎么发生的呢?

public void paintComponent(Graphics g){
              Graphics2D g2 = (Graphics2D)g;
              g2.drawimage(image,x,y,null);
              //
            }

我猜这与actionlisteners类似。但在这种情况下,actionPerformed会在出现event时自动调用button click,并且事件会传递给actionPerformed。无需单独调用此方法并传递Actionevent object。但我不明白paintComponent方法是如何发生的。

button.addActionListener(new ActionListener()
   {
     public void actionPerformed(ActionEvent event){
              //do something
     } 
   });

由于

2 个答案:

答案 0 :(得分:4)

Graphics对象由paint子系统创建。

你永远不应该自己打电话给paintComponent,而应该让涂料系统处理它。即使您想使用Graphics上下文(来自BufferedImage之类的内容)捕获或打印组件,您也应该使用printprintAll

查看Painting in AWT and Swing

答案 1 :(得分:3)

他们是类似的问题。 Graphics对象由Jing请求时由Swing库创建,并在JVM调用此方法时传递给paintComponent(Graphics g)方法。因为你自己并没有直接调用这个方法,所以你永远不会看到正在创建的对象。