Обновление jLabel - PullRequest
       9

Обновление jLabel

1 голос
/ 14 марта 2020

У меня есть простой GUI, у которого есть jTextField, который ждет, когда пользователь что-то вставит. После нажатия кнопки программа:

  1. считывает ввод, сохраняет его в строковой переменной;
  2. открывает новый GUI (то есть в отдельном файле класса) , который содержит пустой jLabel и передает ему переменную String, изменяя ему текст jLabel.

Проблема в том, что как бы я ни старался перенастроить код, добавляя такие вещи, как перерисовка (), revalidate (), et c., jLabel во втором GUI остается пустым. Использование System.out.println (jLabel.getText ()) показывает, что текстовое значение действительно изменено, но не отображается. Как мне «refre sh» этот jLabel, чтобы он показывал то, что я хочу? Я знаю, что могу добавить событие, хотя я не хочу, чтобы пользователь нажимал что-либо, чтобы обновить sh 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 (activeword и перевод - это jLabels, которые доставляют мне неприятности.):

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

Любой ответ очень приветствуется! Пожалуйста, попросите у меня дополнительную информацию о коде, если необходимо, я постараюсь ответить как можно скорее!

1 Ответ

1 голос
/ 14 марта 2020

Лучшее решение: измените конструктор 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 соглашений об именах . Имена переменных должны начинаться со строчной буквы, а имена классов - с заглавной. Изучение этого и последующее позволит нам лучше понять ваш код и позволит вам лучше понять код других.

...