2016-04-09 40 views
0

这是我的代码,它的工作完美并在JFrame中绘制形状。每种方法都是通过其名称进行调用,并且在我的程序中我没有调用任何paintComponent()方法。那么paintComponent()方法的调用方法在哪里?paintComponent()函数调用

import javax.swing.*; 
import java.awt.*; 
import java.util.*; 

public class drawings extends JPanel { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JFrame frame = new JFrame(); 
     frame.setTitle("Shapes"); 
     frame.setVisible(true); 
     frame.setBounds(150, 10, 1000, 700); 
     frame.setResizable(false); 
     frame.add(new drawings()); 
    } 
    public void paintComponent(Graphics g){ 
     g.setColor(Color.BLUE); 
     g.fillRect(20, 10, 200, 100); 
     g.setColor(Color.magenta); 
     g.fill3DRect(230, 10, 200, 100, false); 
    } 
} 
+1

请参阅[在AWT和Swing中绘画](http://www.oracle.com/technetwork/java/painting-140037.html)和[执行自定义绘画](http://docs.oracle.com/javase/tutorial/uiswing/painting /)获取更多关于绘画作品的详细信息 – MadProgrammer

+1

我正在投票结束这个问题,因为它可以通过阅读官方文档轻松回答,[在AWT和Swing中绘画](http: //www.oracle.com/technetwork/java/painting-140037.html) – MadProgrammer

回答

3

粗略地。当您使用UI组件时,会启动一个UI线程来管理不同类型的事件。在这些事件中,有一些与面板的可见性有关,例如,当主机图形系统希望面板可见时,它会向应用程序发送事件以请求面板的绘制,然后UI线程回拨相应的paint()方法,然后调用paintComponent()

0

您实际上没有明确地调用该方法。程序需要调用时,程序自行决定。它通常发生在发生变化时。

如果您有机会想要强制重绘,只需在您的视图类(或该对象)内调用方法repaint()即可。

同样在您的paintComponent()方法中,请确保您要做的第一件事是致电super.paintComponent()