Как бы я использовал JButton для изменения JLabel при каждом нажатии кнопки? - PullRequest
0 голосов
/ 21 апреля 2019

Мне нужно начать с JLabel, например с JLabel, который гласит «Старый текст». Нажав кнопку, я хочу обновить эту JLabel до «Обновленный текст». Я могу сделать это с помощью кода, который я разместил ниже, но моя проблема в том, что я хочу снова нажать кнопку, чтобы вернуться к «Старому тексту» и так далее. По сути, мне нужна кнопка, чтобы позволить мне переключаться между этими двумя текстами, но я не могу заставить это работать.

// this doesn't switch back to "Old Code"

public void actionPerformed(ActionEvent event) {
    if(event.getSource() == jbutton)
        jlabel.setText("Updated Text");

    if(event.getSource() == jbutton)
        jlabel.setText("Old Text");

}

Это работает, но это не то, что мне полностью нужно, потому что это только изменяет JLabel один раз.

public void actionPerformed(ActionEvent event) {
    if(event.getSource() == jbutton)
        jlabel.setText("Updated Text");
}

1 Ответ

2 голосов
/ 21 апреля 2019

Причина, по которой ваш код не работает, заключается в том, что оба оператора if оцениваются как true, поэтому оба выполняются

Есть несколько способов сделать это, вероятно, самый простой - просто проверитьсостояние текста на этикетке и принять решение о том, что делать, например ...

public void actionPerformed(ActionEvent event) { if(event.getSource() == jbutton) jlabel.setText("Updated Text");

    if(event.getSource() == jbutton) {
        if (!jlabel.getText().equals("Old Text")) {
            jlabel.setText("Old Text");
        } else {
            jlabel.setText("Updated text");
        }
    }

}

Теперь, если вы хотите быть "действительно" модным, вы можете использовать немногомодульная математика ...

private int trigger = 0;
@Override
public void actionPerformed(ActionEvent e) {
    trigger++;
    if ((trigger % 2) == 0) {
        label.setText("Old text");
    } else {
        label.setText("Updated text");
    }
}
...