Java JFrame调用JPanel paintComponent
我实际上是在用Java学习图形。我无法理解这个Java JFrame调用JPanel paintComponent,java,swing,graphics,awt,Java,Swing,Graphics,Awt,我实际上是在用Java学习图形。我无法理解这个JFrame对象如何调用MyDrawpanel中的paintComponent方法,该方法扩展了JPanel frame.repaint()再次调用paintComponent但是如何调用呢?为什么我不能像drawPanel.repaint()那样使用MyDrawPanel的drawPanel对象 为什么我不能像drawPanel.repaint()那样使用MyDrawPanel的drawPanel对象 当前,您的frame变量被定义为实例变量,因此
JFrame
对象如何调用MyDrawpanel
中的paintComponent
方法,该方法扩展了JPanel
frame.repaint()
再次调用paintComponent
但是如何调用呢?为什么我不能像drawPanel.repaint()那样使用MyDrawPanel
的drawPanel
对象
为什么我不能像drawPanel.repaint()那样使用MyDrawPanel的drawPanel对象
当前,您的frame
变量被定义为实例
变量,因此它可以在类的任何方法中引用
但是,您的drawPanel
变量被定义为local
变量,因此只能在定义它的方法中引用它
更改drawPanel
变量,使其定义为instance
变量,而不是local
变量。然后可以在actionPerformed(…)
方法中使用drawPanel.repaint()
在面板上调用repain()会更有效,因为只有面板将被重新绘制,而不是框架和按钮
另外,您使用的是旧版本的add(…)方法
您应该使用:
frame.getContentPane().add(button, BorderLayout.SOUTH);
现在,框架将向内容窗格转发添加(…)请求,以便您可以实际使用:
frame.add(button, BorderLayout.SOUTH);
为了节省键入的时间。调用repaint()
告诉绘制管理器绘制组件及其包含的所有子组件。这是绘制“链”的一部分。查看::Swing图形的入门教程。还有:Swing Graphics的高级教程但是frame对象如何调用repaint()的简短回答是“它很复杂”,有时,在获得足够的API经验之前,您需要接受一点“黑魔法”。话虽如此,您应该通读一遍,以便更好地理解绘制系统的工作原理“但是frame对象如何调用该repaint()”——绘制请求由帧响应setSize
和setVisible
。并非所有方法都会这样做,但有些方法必须这样做才能触发布局/绘制过程
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.add(button, BorderLayout.SOUTH);