我花了大约两个小时努力解决这个问题,但仍然没有发生任何事情。我尝试使用 revalidate、paintImmediately 等多种方法更新 JLabel,尽管它没有改变最终结果。
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
这个应该被显示
"Read our ToS first, please."
如果有人能真正帮助我,我将非常感激。谢谢!
编辑,这是解决方案代码,非常感谢@camickr
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { if( prihvaceniuslovi == false ) { notification objekt = new notification(); objekt.setVisible(true); objekt.notificationtos(); } }
最佳答案
不需要repaint()或revalidate()或paintImmediately()。所需要做的就是调用 setText() 方法。
如果框架上的文本没有变化,那么您有两个标签:
- 您添加到框架中的一个,并且
- 另一个只是留在内存中的。
问题出在下面的代码上:
new notification().notificationtos();
new notification().setVisible(true);
您不应该继续创建组件的新实例。组件应该创建一次,然后保存对类中变量的引用,以便将来可以对组件进行更改。
阅读 Swing 教程中关于 How to Use Text Areas 的部分。它展示了如何不断向同一文本区域添加文本。您需要重新构建代码以使其与演示示例类似。
关于java - setText 方法不更新 JLabel,getText() 返回正确的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52122150/