java - setText 方法不更新 JLabel,getText() 返回正确的字符串
问题描述
我正在努力解决这个问题 2 小时,但仍然没有真正发生。我尝试使用 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照片在这里
这个应该已经显示
“请先阅读我们的服务条款。”
如果有人能真正帮助我,我将不胜感激。谢谢!
编辑,这是解决方案代码,非常感谢@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 教程中关于如何使用文本区域的部分。它显示了如何继续将文本添加到同一文本区域。您需要重组您的代码,使其与演示示例类似。
推荐阅读
- php - 从数据库调用数据时无法按字母顺序排序
- php - 致命错误:未捕获的错误:在 2000 1.7 行的 \prestashop\classes\ObjectModel.php 中找不到类“缓存”
- node.js - 单元集成测试、使用 node js、express、javascript 进行系统测试
- java - 使用 lombok 打印集合大小或某个字段的存在
- javascript - 如何在 React 中创建相对路径以显示图像
- database - 导致倾斜连接的数据集
- python - 如何将存储为字符串的十六进制值转换为 python 中的十六进制值?
- python - 为什么 Numpy.randint(0,100) 的 mean() 收敛到 49.49?
- javascript - 通过 url 转到 mapbox 中的位置
- r - R中的密度图