重绘JComponent的正确方法

时间:2017-06-03 20:36:54

标签: java repaint jcomponent

所以,我在java上学过AP课程,在课堂上,我们从未真正考虑过<div class="out"> <div class="A"> <div class="B"> </div> </div> </div>,以及如何正确使用它。我也在互联网上搜索过,我个人在调用repaint()的标准方式上没有找到任何答案。我们是否应该从repaint()类调用repaint()方法,如下所示?

main

或者我会调用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(); } } } 方法的帮助表示赞赏。整个主题对我来说非常笼罩,所以如果我使用的任何术语不正确,我会道歉。提前谢谢。

1 个答案:

答案 0 :(得分:2)

为什么你认为你需要调用repaint()?

当组件的属性发生更改时,Swing组件会自动调用repaint()方法。

例如,如果你有一个JLabel并且你调用setText(...)setIcon(...),那么这些方法将自动调用repaint()。

你永远不会从绘画方法中调用repaint()。

如果您正在进行自定义绘制,那么您的代码应该像任何其他Swing组件一样进行结构化。那就是为自定义组件创建getter / setter方法以更改组件的属性。在setter方法中,您调用repaint()。