2017-12-21 33 views
0

ich eine Anwendung in Java Ich schreibe die Java Swing-Bibliothek verwenden und auf diese Zeilen Code von C# für eine Funktionalität Äquivalent suchen Windows mit:Was entspricht der DialogResult-Eigenschaft von WindowsForms in Java SWINGs JFrames?

MyDialog form = new MyDialog(); 
form.showDialog(); 

if (form.DialogResult == DialogResult.OK) 
     doSomething(); 

Ich habe eine gleichwertige Funktionalität nicht in der Lage gewesen zu finden für JFrames in Java.

Der Code, den ich auf mich arbeite, ist die folgende:

LoginFrame loginFrame = new LoginFrame(CONTROLLER); 
loginFrame.setVisible(true); 

Die vorherigen zwei Zeilen Code Einführung eines Login-Fenster, in dem der Benutzer kann seine E-Mail und Passwort. Das Fenster zeigt 2 Schaltflächen an: OK und ABBRECHEN. Nachdem das Fenster geschlossen ist, möchte ich wissen, welche der beiden Tasten der Benutzer gedrückt hat.

Was ist die Standardmethode in Java Swing mit JFrames?

+1

Wahrscheinlich 'JOptionPane.showConfirmDialog (..);'. –

+0

Meine erste Schlussfolgerung ist, dass meine Wahl des JFrame-Objekts für Dialoge in falscher ... können Sie bestätigen? Sollte ich stattdessen JDialogs verwenden? Vielen Dank! – ismarlowe

+1

* „Soll ich stattdessen mit JDialogs werden?“ * Absolut, denn dies ist, entweder einen modalen 'JDialog' oder ein' JOptionPane' (die modal Standardeinstellung). Siehe [diese Antwort] (https://stackoverflow.com/a/47644458/418556) für ein eigenständiges Beispiel einer Anmeldung mit einem 'JOptionPane'. Siehe auch [Die Verwendung mehrerer JFrames, gute/schlechte Praxis?] (Http://stackoverflow.com/q/9554636/418556) (Normalerweise sollte nur die Hauptanwendung auf einem 'JFrame' basieren.) –

Antwort

0

Sie können ActionListener auf Ihre Tasten setzen. Es gibt viele Möglichkeiten.

Anonym Aktion Listener

button1.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent actionEvent) { 
     if(e.getSource() == button1) { 
      //if clicks the first button 
     } else if (e.getSource() == button2) { 
      //if clicks the second button 
     } 
    } 
}); 

Klasse, die Aktion Listener (für Wartungsprobleme beste Option) implementiert

class CheckButtonActionListener implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent actionEvent) { 
     if(e.getSource() == button1) { 
      //if clicks the first button 
     } else if (e.getSource() == button2) { 
      //if clicks the second button 
     } 
    } 

} 

und stellen Sie die Klasse zu Ihrem JButton:

CheckButtonActionListener checker = new CheckButtonActionListener(); 
button.addActionListener(checker); 

oder:

button1.addActionListener(new CheckButtonActionListener(); 
1

Eine Anwendung wird einen einzigen JFrame als Hauptfenster haben.

Wenn Sie ein untergeordnetes Fenster benötigen, verwenden Sie einen JDialog. Ein JDialog ist wie ein JFrame. Sie müssen die gesamte Logik codieren und alle Schaltflächenereignisse selbst verarbeiten.

Ein JOptionPane ist ein vorinstalliertes JDialog, das Ihnen einige Standardfunktionen bietet.

Sie können einen einfachen JOptionPane mit mehreren Eingabefeldern mit Code so etwas wie erstellen:

JTextField firstName = new JTextField(10); 
//firstName.addAncestorListener(new RequestFocusListener()); 
JTextField lastName = new JTextField(10); 
Object[] msg = {"First Name:", firstName, "Last Name:", lastName}; 

result = JOptionPane.showConfirmDialog(
    frame, 
    msg, 
    "Enter Name", 
    JOptionPane.OK_CANCEL_OPTION, 
    JOptionPane.PLAIN_MESSAGE); 

if (result == JOptionPane.YES_OPTION) 
{ 
    System.out.println(firstName.getText() + " : " + lastName.getText()); 
} 
else 
{ 
    System.out.println("Canceled"); 
} 

Ein Problem bei der oben ist, dass der Fokus auf die Tasten sein wird, nicht das Textfeld ein. Sie können dieses Problem beheben, indem Sie das Request Focus Listener

verwenden. Wenn Sie das Layout der Komponenten im Optionsbereich nicht mögen, müssen Sie ein benutzerdefiniertes Panel mit Ihren Komponenten erstellen und das Panel zum Optionsfenster hinzufügen.

Sie sollten auch den Abschnitt aus dem Swing-Tutorial auf Making Dialogs überprüfen. Dieser Abschnitt und das allgemeine Tutorial geben Ihnen Swing-Grundlagen als Übergang von C#.

Verwandte Themen