Mam formularz logowania, w którym użytkownik może wprowadzić swoje dane logowania, aby się zalogować. Mam JLabel
, który służy do wyświetlania tekstu informującego użytkownika o tym, że nazwa użytkownika nie może być pusta. Ta etykieta jest wyświetlana po kliknięciu przez użytkownika przycisku logowania, gdy pole tekstowe jest puste.Obsługa zdarzeń edycji w JTextField
Chcę, aby w momencie, w którym użytkownik zaczyna pisać w polu tekstowym, etykieta z informacją powinna zniknąć. Jak mogę to osiągnąć?
Oto kod:
public class JTextFiledDemo {
private JFrame frame;
JTextFiledDemo() {
frame = new JFrame();
frame.setVisible(true);
frame.setSize(300, 300);
frame.setLayout(new GridLayout(4, 1));
frame.setLocationRelativeTo(null);
iniGui();
}
private void iniGui() {
JLabel error = new JLabel(
"<html><font color='red'> Username cannot be empty!<></html>");
error.setVisible(false);
JButton login = new JButton("login");
JTextField userName = new JTextField(10);
frame.add(userName);
frame.add(error);
frame.add(login);
frame.pack();
login.addActionListener((ActionEvent) -> {
if (userName.getText().equals("")) {
error.setVisible(true);
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JTextFiledDemo tf = new JTextFiledDemo();
}
});
}
}
Myśl upvoted odpowiedź, ale dlaczego 'error' musi być ostateczna dla' Java 1.7 i below' Zamiast 'błąd JLabel' powinna być zmienna instancji , aby uniknąć, ponieważ jest "ostateczny" –
@ nIcEcOw niższa niż 8 wersji, w 1.8 może nie być ostateczna. W wersjach niższych musi być ona ostateczna, ponieważ jest zmienną lokalną lub zadeklarowana jako zmienna instancji – alex2410
Zmienna "final" jest potrzebna z jakiegoś powodu, ale nie w celu opisanym w tym poście. Jeśli 'error JLabel' jest zmienną instancji, wtedy nie ma potrzeby deklarowania jej jako' final'. –