【发布时间】:2020-06-26 06:00:52
【问题描述】:
我有一个简单的 GUI,它有一个 jTextField 等待用户输入一些东西。单击按钮后,程序:
- 读取输入,将其保存在字符串变量中;
- 打开一个新的 GUI(即在单独的类文件中),其中包含一个空 jLabel,并将 String 变量传递给它,将 jLabel 文本更改为它。
问题是,无论我多么努力地重新配置代码,添加诸如 repaint()、revalidate() 等内容,第二个 GUI 中的 jLabel 都保持为空。使用 System.out.println(jLabel.getText()) 表明文本值确实发生了变化,但没有显示。我如何“刷新”这个 jLabel,所以它会显示我想要的内容?我知道我可以添加一个事件,虽然我不希望用户单击任何内容来刷新 GUI,但值应该在它启动时就在那里。我已经阅读了几篇类似的帖子,但发现这些解决方案对我不起作用。
第一个GUI的按钮点击事件代码:
private void sbuttonActionPerformed(java.awt.event.ActionEvent evt) {
errortext.setText("");
Search = sfield.getText();
Transl = hashes.find(Search);
if (Transl.equals("0")) errortext.setText("Word not found in database.");
else {
ws.run(Search, Transl); // <- this opens the second GUI, with two String parameters I want to display in the second GUI;
}
}
第二个 GUI 的代码(活动词和翻译是给我带来麻烦的 jLabel。):
public void run(String Search, String Transl) {
WordScreen init = new WordScreen(); //initialise the second GUI;
init.setVisible(true);
activeword.setText(Search);
translation.setText(Transl);
}
非常欢迎任何回复!如有需要请向我索取有关代码的更多信息,我一定会尽快回复!
【问题讨论】:
-
请考虑创建一个非常小的独立且功能齐全的程序(minimal reproducible example -- 请阅读链接)来演示您的问题和您的代码、编译和运行的代码并发布作为您问题中的代码格式文本。顺便说一句,你会想要学习和使用Java naming conventions。变量名应全部以小写字母开头,而类名应以大写字母开头。遵循这将使我们更好地理解您的代码。
-
可能最好的解决方案是更改 WordScreen 的构造函数以接受两个感兴趣的字符串:
WordScreen init = new WordScreen(Search, Transl);,然后将这些参数传递到需要的地方