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

repaint method is doing nothing once called

我想了解 repaintpaintComponents 在 Java Swing 中是如何工作的,想知道为什么这个程序在执行时只显示 "hello"。

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();
}

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

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

应该是:

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

(无复数)。

这样:

  • 油漆链没有断
  • painting 字符串将出现(API 感觉有必要绘制组件的次数)。