重绘方法一旦调用就什么都不做

时间:2015-06-07 16:14:28

标签: java swing jlabel java-2d

我试图理解repaintpaintComponents如何在Java Swing中工作,并想知道为什么这个程序只显示"你好"当它被执行时。

class MyLabel extends JLabel{

    private static final long serialVersionUID = 1L;

    public MyLabel(){
        System.out.println("hello");
        repaint();
    }

    @Override
    public void paintComponents(Graphics g) {
        super.paintComponents(g);
        System.out.println("painting");
    }
}

    public static void main(String[] args) {
         MyLabel lbl = new MyLabel();
}

2 个答案:

答案 0 :(得分:2)

public void paintComponents(Graphics g) { 
  super.paintComponents(g); 

应该是:

public void paintComponent(Graphics g) { 
  super.paintComponent(g);

(不是复数)。

这样:

  • 油漆链没有破损。
  • 将出现painting字符串(与API绘制组件所需的次数相同)。

答案 1 :(得分:1)

在这里,您只需创建一个MyLabel实例。因此,你在构造函数中的sout被调用并打印你好。 通常在swing repaint()方法中,可以通过系统事件或app-event获取触发器。但是,由于您刚刚创建了一个实例而没有将其放置在任何地方,因此不会触发任何事件 你可以阅读Painting in AWT and Swing