Frage von dodoG0097, 11

Wie funktioniert das mit dem JOptionPane?

Hallo, ich habe hier ein Programm, was per GUI einfach zwei Strings miteinander vergleicht. Also zwei TextFields, zwei Labels und nen Button. Falls die zwei Strings übereinstimmen, soll ein JOptionPane kommen mit zwei Auswahlmöglichkeiten, z.B. YES_NO oder so, ist jz mal unerheblich welcher Typ. .

Mein Problem: Ich hab das Teil entsprechend im Quellcode definiert und auch soweit alles den Buttons zugewiesen.

Nur wenn ich das Programm starte öffnet sich zuerst die JOptionPane und nach dem Schließen ebendieser, erst der JFrame. 1. Wie ändere ich das? 2. Nach der einen if-Abfrage in der void-methode "login" soll hinkommen, dass wenn die if-Abfrage = true ist, diese OptionPane geöffnet wird. Wie kann ich das realisieren? (habe die Stelle mit 6 nullen gekennzeichnet ^-^)

Quellcode: geg: eine Klasse "Lösung_4_1", GUI-Deklarierungen, 2 Arrays: "nutzer" und "passwort"

public Lösung_4_1()
    {
        super("Verifizierung");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

login.addActionListener(this);        
        Container contentPane = getContentPane();
        contentPane.setLayout(new GridLayout(3,1));
        contentPane.add(panel1);
        contentPane.add(panel2);
        contentPane.add(panel3);               
        op = new JOptionPane();
        a = JOptionPane.showOptionDialog(op, "Das eingegebene Passwort war falsch", "Error", JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, null, optionen1, optionen1[0]);
        setBounds(700,200,400,300);

void login() {
        int i = 0;
        do
            if (tnutzer.getText().equals(nutzer[i])) {
                if (tpasswort.getText().equals(passwort[i])) {
                    000000 }
                i = i + 1;
            }           
        while (i == nutzer.length);
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if (source == login) {
            login(); }
       else if (a == op.YES_OPTION) {
            setVisible(false); }
        else if (a == op.NO_OPTION) {
            dispose(); }}
    
    public static void main(String[] args) {
        Lösung_4_1 l = new Lösung_4_1();
        l.setVisible(true);}

Der Bereich zwischen der DefaultCloseOperation und der ActionListenerzuweisung vom Button "login" wurde mit optische Veränderungen von Labels, TextFields und nem Button gefüllt.

Ich wäre jedem unendlich dankbar der weiterhelfen könnte. Danke schonmal :)

Expertenantwort
von regex9, Community-Experte für Programmierung, 3
  1. Um das Frame vorher "zu öffnen", musst du es auch vorher sichtbar machen. Also bereits innerhalb des Konstruktors von Lösung_4_1, noch bevor du die Methode showOptionDialog aufrufst.
  2. Rufe die Methode genau da auf, wo deine Nullen momentan stehen.

Im Übrigen

Diese Zeile benötigst du nicht:

op = new JOptionPane();


Übergib der Methode showOptionDialog als 1. Argument einfach eine null-Referenz, so wie es in der Dokumentation (https://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html) ebenso gezeigt wird. Dein Dialogfenster benötigt keine Elternkomponente.


Außerdem müsstest du genauer definieren. Auch wenn die Deklaration sicherlich woanders stattfindet, der Name ist nichtssagend.

Keine passende Antwort gefunden?

Fragen Sie die Community