1

ボタンがクリックされるたびに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");
        } 
    }
}

引数なしで2つのLabelオブジェクトを初期化すると、ウィンドウをクリックしてドラッグしてサイズを変更するまで、送信ボタンをクリックしたときにsetTextメソッドに渡された文字列「12」と「31」が画面に表示されません。それ。私はこれにMacでのみ気づきました。PCでは、文字列は表示されますが、ウィンドウのサイズを変更するまで表示されません。ただし、次のようにラベルを初期化すると、次のようになります。

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

Macでは、文字列は意図したとおりに表示されますが、ウィンドウのサイズが変更されるまで文字列は隠されます。私は何が欠けていますか?

4

3 に答える 3

2

ここで述べたようにフレームで validate() を呼び出すと、問題が解決しました。

于 2009-11-30T14:45:47.277 に答える
0

さて、あなたの投稿のほとんどは1年以上前のものなので、私はあなたに疑いの利益を与えます。私はAWTを使用したことがないので、問題が何であるかはわかりませんが、次のことをお勧めします。

1)クラスに適切な名前を付けます。「Date」はすでにJDKのクラスです。より良い名前を選択してください。

2)AWTの代わりにSwingコンポーネントを使用してみてください。

3)クラスから静的変数を取り除きます。

4)WindowListenerを削除して、フレームを閉じます。

ここに投稿したコード例は10〜15歳です。新しいことを試してください。最近の例については、 Swingチュートリアルから始めてください。

于 2009-11-21T17:32:23.440 に答える
0

フレームを再描画するか、十分なスペースを設定してみてください (setPreferredSize, setMininumSize)

于 2009-11-21T16:11:14.523 に答える