使用setText方法时,JLabel不会更新

时间:2013-07-10 18:36:41

标签: java swing jlabel

在我正在进行的项目中,我想通过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());
}

JPanel名为generalPanel

//// 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);
}

标签以文本的空字符串开头,在窗口启动时,通过从相关来源获取信息来更新标签。请问JLabel为什么不更新并显示他们的信息?

3 个答案:

答案 0 :(得分:3)

你是如何创建JLabel的?如果文本以“”开头,并且您使用新的JLabel(“”)创建了它,则JLabel的宽度可能会初始化为0,然后在更新时不会显示任何文本。我相信过去我遇到过这样的问题。作为测试,尝试使用新的JLabel(“aaaaaaaaa”)或更长的字符串来创建标签,然后使用setText(“”);然后,当你setText(somethingElse)时,看看是否会导致文本出现。如果是,那么宽度可能是问题,你可以从那里开始工作。 - ajb 19分钟前

这个评论是实际的答案,当创建一个带有空字符串的JLabel作为文本时,使用WindowBuilderPro时标签的尺寸没有正确设置。我的标签确实存在,并且正在使用我的问题中提供的代码进行更新,但标签不可见。

从包含文本的标签开始,然后将文本设置为空字符串正常工作。

答案 1 :(得分:2)

方法paintImmediately()可用于使Swing组件立即更新。在setText()之后,你应该像下面这样调用paintImmediately()。

jLabel.setText("new text")
jLabel.paintImmediately(jLabel.getVisibleRect());

答案 2 :(得分:-1)

您应该尝试在包含JLabel的组件上调用revalidate()或repaint()。

干杯