重绘方法一旦调用就什么都不做
repaint method is doing nothing once called
我想了解 repaint
和 paintComponents
在 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 感觉有必要绘制组件的次数)。
我想了解 repaint
和 paintComponents
在 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 感觉有必要绘制组件的次数)。