Ich brauche den Benutzer, um einen Namen einzugeben, und ich möchte die OK-Schaltfläche deaktivieren, bis eine Eingabe erfolgt. Wie kann ich es deaktivieren…?
Deaktivieren Sie die OK-Schaltfläche in JOptionPane.dialog, bis der Benutzer eine Eingabe macht
Verrückter Programmierer
JOptionPane
ermöglicht es Ihnen, eine Komponente als Nachrichtenbereich und die Steuerelemente/Optionen bereitzustellen, die darauf angezeigt werden können.
Wenn Sie der Nachrichtenkomponente die richtigen Listener hinzufügen, sollten Sie die als Optionen verwendeten Steuerelemente beeinflussen können.
Schauen Sie sich an JOptionPane.showOptionDialog(Komponente parentComponent, Objektnachricht, Zeichenfolgentitel, int optionType, int messageType, Symbolsymbol, Objekt[] Optionen, Objekt initialValue)
Aktualisiert
Zum Beispiel…
public class TestOptionPane05 {
public static void main(String[] args) {
new TestOptionPane05();
}
protected JOptionPane getOptionPane(JComponent parent) {
JOptionPane pane = null;
if (!(parent instanceof JOptionPane)) {
pane = getOptionPane((JComponent)parent.getParent());
} else {
pane = (JOptionPane) parent;
}
return pane;
}
public TestOptionPane05() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
final JButton okay = new JButton("Ok");
okay.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
pane.setValue(okay);
}
});
okay.setEnabled(false);
final JButton cancel = new JButton("Cancel");
cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
pane.setValue(cancel);
}
});
final JTextField field = new JTextField();
field.getDocument().addDocumentListener(new DocumentListener() {
protected void update() {
okay.setEnabled(field.getText().length() > 0);
}
@Override
public void insertUpdate(DocumentEvent e) {
update();
}
@Override
public void removeUpdate(DocumentEvent e) {
update();
}
@Override
public void changedUpdate(DocumentEvent e) {
update();
}
});
JOptionPane.showOptionDialog(
null,
field,
"Get",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
new Object[]{okay, cancel},
okay);
}
});
}
}
-
Funktioniert bei mir. Danke Kumpel!
– Adam Mackler
25. November 2014 um 7:36 Uhr
-
Ich hoffe, Sie sind noch aktiv und können meine Frage beantworten. Warum brauchen wir die
getOptionPanel
Methode? Ich hatte versucht, eine Variable für die zu setzenOptionPanel
und Ruf ansetValue
innerhalb derActionListener
mit der Variablen, aber es hat nicht funktioniert, bis ich Ihre implementiert habegetOptionPanel
Methode.– BaneDad
28. Dezember 2018 um 19:30 Uhr
Das geht meines Wissens nach ohne Überschreiben nicht JOptionPane
.
Versuchen Sie es mit der Suche nach Swinglabs oder jGoodies Bibliotheken für Java. Sie haben Typ für das, was Sie brauchen, eingebaut.
Ich brauche den Benutzer, um einen Namen einzugeben, und ich möchte die OK-Schaltfläche deaktivieren, bis eine Eingabe erfolgt.
falscher Weg, es zu tun.
dh definieren ‘was ist ein Name’ = kann alles sein.
Sie versuchen also, keine leere Zeichenfolge zu akzeptieren,
und Sie tun dies als Fehlerprüfung ‘nachdem’ die OK-Taste gedrückt wurde.
wenn leer – Popup-Fehlermeldung/Eingabeaufforderung wiederholen/Abbrechen bestätigen/was auch immer Sie tun möchten