我试图通过单击按钮时调用setText方法来动态设置标签中的文本。这是我的代码:

import java.awt.*;
import java.awt.event.*;

class Date {
    public static void main(String[] args) {
        new MainWindow();
    }
}

class MainWindow {
    static Label month = new Label();
    static Label day = new Label();
    static Button submit = new Button("Submit");

    MainWindow() {
        Frame myFrame = new Frame("Date Window");
        myFrame.setLayout(new FlowLayout());
        myFrame.add(month);
        myFrame.add(day);
        myFrame.add(submit);
        submit.addActionListener(new ButtonListener());

        myFrame.addWindowListener(new WindowListener());
        myFrame.setSize(200, 200);
        myFrame.setVisible(true);
    }
}

class WindowListener extends WindowAdapter {
    @Override
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}

class ButtonListener implements ActionListener  {
    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == MainWindow.submit) {
            MainWindow.month.setText("12");
            MainWindow.day.setText("31");
        }
    }
}


当我初始化两个没有任何参数的Label对象时,单击“提交”按钮时传递给setText方法的字符串“ 12”和“ 31”在屏幕上不可见,直到我单击窗口并拖动以调整大小它。我只在Mac上注意到这一点。在PC上,字符串是可见的,但在我调整窗口大小之前被遮盖了。但是,如果我这样初始化标签:

    static Label month = new Label("0");
    static Label day = new Label("0");


在Mac上,字符串按预期显示,但是直到调整窗口大小后,字符串才会被遮盖。我想念什么?

最佳答案

如提到的here在Frame上调用validate()解决了该问题。

07-23 10:24