Deaktivieren Sie die OK-Schaltfläche in JOptionPane.dialog, bis der Benutzer eine Eingabe macht

Lesezeit: 2 Minuten

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…?

Benutzer-Avatar
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…

Geben Sie hier die Bildbeschreibung ein

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 setzen OptionPanel und Ruf an setValue innerhalb der ActionListener mit der Variablen, aber es hat nicht funktioniert, bis ich Ihre implementiert habe getOptionPanel 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

1014820cookie-checkDeaktivieren Sie die OK-Schaltfläche in JOptionPane.dialog, bis der Benutzer eine Eingabe macht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy