重绘 JComponent 的正确方法
Proper way for Repainting JComponent
所以,我在 java 上考过 AP class,在 class 上,我们从未真正考过 repaint()
,以及如何正确使用它。我也在网上搜索过,我个人没有找到任何关于标准调用方式的答案repaint()
。我们是否应该像下面这样从 main
class 调用 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);
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().
所以,我在 java 上考过 AP class,在 class 上,我们从未真正考过 repaint()
,以及如何正确使用它。我也在网上搜索过,我个人没有找到任何关于标准调用方式的答案repaint()
。我们是否应该像下面这样从 main
class 调用 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);
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().