2017-06-03 47 views
0

所以,我已经在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()方法的任何帮助。整个话题对我来说都很笼统,所以如果我使用的术语不正确,我很抱歉。所有的提前感谢。

回答

2

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

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

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

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

如果您正在做自定义绘画,那么您的代码应该像其他任何Swing组件一样构造。那就是你为你的自定义组件创建getter/setter方法来改变组件的属性。在setter方法中,您调用repaint()。