0

GUI画面があり、ラベルが付いています。以下に示すように、ラベルにテキストを設定します(Test)。しかし、それは更新されていません。次のコードにエラーがあると思います。ここでは、tryブロックでFrameTestの新しいオブジェクトを再作成しています。

FrameTest frame = new FrameTest();
frame.setVisible(true); //(the full code given below)

完全なコード:注:次のクラスはJFrameから拡張されています

import java.awt.BorderLayout;

public class FrameTest extends JFrame {

    private JPanel contentPane;
    private JLabel lblLabel;

    public  void mainScreen() {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FrameTest frame = new FrameTest();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    public void writeLabel(String k){
        this.lblLabel.setText(k);

    }


    public FrameTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        lblLabel = new JLabel("LABEL");
        contentPane.add(lblLabel, BorderLayout.CENTER);
    }

}

テストクラス

public class Test {

    public static void main(String[] args) {

         FrameTest f = new FrameTest();
         f.mainScreen();
         f.writeLabel("FFFFF");
}}

"FFFFF"ヘルプ、テキストをラベルに表示するにはどうすればよいですか?

4

5 に答える 5

2

FrameTestにメソッドを追加します

public String readLabel(){
       return this.lblLabel.getText();
}
于 2012-11-20T09:54:35.517 に答える
2

ルーチンで作成したものとは異なるmainScreen()新しいものを作成するので、実際には非表示のフレームのテキストを変更します。代わりにこれを試してください:FrameTestmain

private FrameTest frame = this;

public  void mainScreen() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
                frame.setVisible(true);
        }
    });
}

または単に:

public  void mainScreen() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
                setVisible(true);
        }
    });
}
于 2012-11-20T10:02:34.280 に答える
1

mainScreen()関数を次のように変更します

public  void mainScreen() {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

残りのコードは同じです

于 2012-11-20T10:03:54.593 に答える
0

コードの使用方法によって、フレームまたはラベルの再描画がトリガーされることはありません。Swingでは、多くのGuiオブジェクトを変更できますが、要求された場合にのみ1つのバッチで再描画されます。再描画が自動的に行われる最も一般的なケースは、イベントハンドラーから戻った後です。(ボタンのクリックやキーの押下など)

于 2012-11-20T09:57:07.227 に答える
0

tryブロックを;に置き換えます。

            try {
                setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }

すべてが機能します!

于 2012-11-20T10:02:43.687 に答える