setText方法不会更新JLabel,getText()返回正确的字符串

时间:2018-08-31 20:19:35

标签: java swing jlabel gettext settext

我努力将其修复了大约2个小时,但实际上什么都没发生。我尝试使用多种方法更新JLabel,例如revalidate,paintImmediately等,尽管它没有改变最终结果。

public void notificationtos( ) {

    jLabel2.setText( "Read our ToS first, please." );
    jLabel2.revalidate();
    jLabel2.paintImmediately(jLabel2.getVisibleRect());
    System.out.println("debug" );
    System.out.println( jLabel2.getText() );
}


private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
    if( prihvaceniuslovi == false ) {
        new notification().notificationtos();
        new notification().setVisible(true);
    }
}

也在调试中,这是上面代码的输出:

run:
debug
Read our ToS first, please.
BUILD SUCCESSFUL (total time: 3 seconds)

GUI正常显示,但是字符串没有从JLabel初始化时设置的字符串中更改。

而不是下面的字符串显示在照片中... GUI Photo here

应该已经显示了这个

  

“请先阅读我们的服务条款。”

如果有人可以帮助我,我将不胜感激。谢谢!

编辑,这是解决方案代码,非常感谢@camickr

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
    if( prihvaceniuslovi == false ) {
        notification objekt = new notification();
        objekt.setVisible(true);
        objekt.notificationtos();
    }
}

1 个答案:

答案 0 :(得分:2)

不需要repaint()或revalidate()或paintImmediately()。所需要做的就是调用setText()方法。

如果文本在框架上没有变化,则您有两个标签:

  1. 您添加到框架中的一个,
  2. 另一个正坐在记忆中的人。

问题可能是以下代码:

new notification().notificationtos();
new notification().setVisible(true);

您不应该继续创建组件的新实例。应该一次创建一个组件,然后在类中保存对变量的引用,以便将来可以更改该组件。

阅读How to Use Text Areas上Swing教程中的部分。它显示了如何继续将文本添加到同一文本区域。您需要重组代码,使其与演示示例相似。