【问题标题】:Updating a jLabel更新 jLabel
【发布时间】:2020-06-26 06:00:52
【问题描述】:

我有一个简单的 GUI,它有一个 jTextField 等待用户输入一些东西。单击按钮后,程序:

  1. 读取输入,将其保存在字符串变量中;
  2. 打开一个新的 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);,然后将这些参数传递到需要的地方

标签: java swing refresh jlabel


【解决方案1】:

最佳解决方案:更改 WordScreen 的构造函数以接受两个感兴趣的字符串:

从这里:

public void run(String Search, String Transl) {
    WordScreen init = new WordScreen(); //initialise the second GUI;
    init.setVisible(true);
    activeword.setText(Search); 
    translation.setText(Transl);
}

到这里:

public void run(String search, String transl) {
    WordScreen init = new WordScreen(search, transl); 
    init.setVisible(true);
}

然后在 WordScreen 构造函数中使用那些需要的字符串:

public WordScreen(String search, String transl) {
    JLabel someLabel = new JLabel(search);
    JLabel otherLabel = new JLabel(transl);

    // put them where needed
}

请注意,如果没有您发布一个像样的MRE,我无法创建一个全面的答案


顺便说一句,你会想学习和使用Java naming conventions。变量名应全部以小写字母开头,而类名应以大写字母开头。学习这一点并遵循这一点将使我们能够更好地理解您的代码,并让您更好地理解其他人的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多