3

私が現在取り組んでいるプロジェクトには、Jlabel を介して表示したい情報がいくつかあります。GUIの他の場所にいくつかのボタンとテキストフィールドがあり、JLabelを更新したいのですが、テキストが変更されないか、起動時に更新されます。

このサイトの他の質問で提案されているように、並行処理を使用してラベルを更新しようとしましたが、ラベルの更新に失敗しました。並行性は、必要に応じてテキストフィールドとコンボボックスを更新することで機能します。

私のコードの現在の反復は次のようになります。

JFrame

//// This is a snippet from the JFrame

public void start()
{
    this.setSize(900, 700);
    this.setVisible(true);

    devicePanel.populateDeviceDefinitions();
    updateServiceInfo();
    updateCommandInfo();
    startUpdateTimer();
}

public void updateServiceInfo()
{
    EventService service = JetstreamApp.getService();

    generalPanel.updateServiceInfo(service.getBaseUri(), 
            service.getAccessKey(), String.valueOf(service.getWindowTime()));
}

public void updateCommandInfo()
{
    JetstreamServiceClient client = JetstreamApp.getClient();

    generalPanel.updateCommandInfo(client.getBaseUri(), client.getAccessKey());
}

generalPanel という名前の JPanel

//// This is a snippet from the generalPanel
//// All of the variables in the following code are JLabels

public void updateServiceInfo(String baseUrl, String accessKey,
        String windowTime)
{
    serviceUrl.setText(baseUrl);
    serviceAccessKey.setText(accessKey);
    serviceWindowTime.setText(windowTime);
}

public void updateCommandInfo(String baseUrl, String accessKey)
{
    commandUrl.setText(baseUrl);
    commandAccessKey.setText(accessKey);
}

ラベルはテキストの空の文字列で始まり、ウィンドウの開始時に、関連するソースから情報を取得して更新されることを意図しています。JLabels が情報を更新したり表示したりしない理由を教えてください。

4

3 に答える 3

6

JLabel はどのように作成されましたか? テキストが "" で始まり、new JLabel("") で作成した場合、JLabel の幅が 0 に初期化され、更新時にテキストが表示されない可能性があります。私は過去にそのような問題を抱えていたと思います。テストとして、new JLabel("aaaaaaaaaa") またはより長い文字列を使用してラベルを作成してから、setText(""); を使用してみてください。その後、Text(somethingElse) を設定したときに、テキストが表示されるかどうかを確認します。そうであれば、おそらく幅が問題であり、そこから作業を進めることができます。– ajb 19 分前

このコメントは実際の答えです。テキストとして空の文字列を使用して JLabel を作成すると、WindowBuilderPro を使用するとラベルの寸法が正しく設定されません。私のラベルは存在し、質問で提供されたコードで更新されていましたが、ラベルは表示されませんでした。

テキストを含むラベルから始めて、テキストを空の文字列に設定すると、正しく機能します。

于 2013-07-10T19:09:55.123 に答える