正确的重绘方法JComponent
问题描述:
所以,我已经在java上学了一门AP课程,而在课堂上,我们从来没有真正去过repaint()
,以及如何正确使用它。我也通过互联网搜索,并且我个人还没有找到任何关于调用repaint()
的标准方式的答案。我们是否应该调用main
类的repaint()
方法,如下所示?正确的重绘方法JComponent
import java.awt.*;
import javax.swing.*;
public class RepaintExample{
public static void main(String[] args){
JFrame frame = new JFrame();
JComponent component = new JComponent();
frame.add(component);
frame.repaint();
}
}
或者我称之为JComponent.repaint()
像这样
import java.awt.*;
import javax.swing.*;
public class RepaintExample{
public static void main(String[] args){
JFrame frame = new JFrame();
JComponent component = new JComponent();
frame.add(component);
component.repaint();
}
}
或者,有两种方法都错了,JComponent.repaint()
应该从paintComponent
被称为如下所示:
import java.awt.*;
import javax.swing.*;
public class ComponentRepaintExample extends JComponent{
public void paintComponent(Graphics g){
//Draw stuff
for(int i = 0; i < 10; i++){
//Draw stuff
this.repaint();
}
}
}
这是这三种方法都是错误的。了解如何正确使用repaint()
方法的任何帮助。整个话题对我来说都很笼统,所以如果我使用的术语不正确,我很抱歉。所有的提前感谢。
答
为什么你认为你需要调用repaint()?
当组件的属性发生更改时,将由Swing组件自动调用repaint()方法。
例如,如果您有一个JLabel,并且您调用setText(...)
或setIcon(...)
,那么这些方法将自动调用repaint()。
你永远不会从绘画方法调用repaint()。
如果您正在做自定义绘画,那么您的代码应该像其他任何Swing组件一样构造。那就是你为你的自定义组件创建getter/setter方法来改变组件的属性。在setter方法中,您调用repaint()。