繁体   English   中英

为什么paintComponent()运行,即使没有人调用它?

[英]Why is paintComponent() run even though no one calls it?

我想知道是否有人可以解释在运行main()中的所有语句之后如何/为什么调用paintComponent()。 我感到困惑的原因是没有对painComponent()的显式调用,但无论如何都会运行。

// JComponent is a base class for custom components 
public class SimpleDraw extends JPanel {
    public static void main(String[] args) {
        SimpleDraw canvas = new SimpleDraw();
        JFrame f = new JFrame("SimpleDraw"); // jframe is the app window
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(400, 400); // window size
        f.setContentPane(canvas); // add canvas to jframe
        f.setVisible(true); // show the window
    }
    // custom graphics drawing 
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g; // cast to get 2D drawing methods
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,  // antialiasing look nicer
                            RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setStroke(new BasicStroke(32)); // 32 pixel thick stroke
        g2.setColor(Color.BLUE); // make it blue
        g2.drawLine(0, 0, getWidth(), getHeight());  // draw line 
        g2.setColor(Color.RED);
        g2.drawLine(getWidth(), 0, 0, getHeight());  
    }
}

这是关于如何处理paintComponent的一个不错的小写。

摘抄:

谁调用paintComponent

...调用此方法是因为用户使用需要重绘的用户界面执行了某些操作,或者您的代码已明确请求重新绘制。 当它变得可见时自动调用当窗口变得可见(未覆盖或最小化)或调整大小时,“系统”会自动调用paintComponent()方法,用于必须重绘的所有屏幕区域。 通过repaint()从用户定义的侦听器间接调用...

在写作以及一些参考链接中有更多内容,不幸的是,它们都被打破了。

我还发现这篇博文从基本的角度讨论了Java中的绘画/绘图。 看看第一段:

为什么我们将所有图形绘图代码放入paintComponent()方法? 这看起来很奇怪,因为看起来我们应该能够简单地将一些简单的图形命令粘贴到Java应用程序中的main()方法中,然后完成绘图。 paintComponent来自哪里? 如果我们从不在代码中调用它,它是如何执行的?

在Java文档中,您实际上必须阅读有关绘画的内容,以便开始了解正在发生的事情。 paintComponent文档不是很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM