2016-05-07 3 views
0

Guten Tag!Fenster schließen ohne zu schließen Anwendung

Ich habe diesen Code:

private static class ClickListener implements ActionListener { 

    public ClickListener() { 

    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     JFrame frame = new JFrame(); 
     JLabel label = new JLabel("Opção Indisponivel"); 
     JPanel panel = new JPanel(); 
     frame.add(label, BorderLayout.CENTER); 
     frame.setSize(300, 400); 
     JButton button = new JButton("Voltar"); 
     button.addActionListener(new CloseWindowListener()); 
     panel.add(button); 
     frame.add(panel, BorderLayout.SOUTH); 
     frame.setVisible(true); 
    } 
} 

private static class CloseWindowListener implements ActionListener { 

    public CloseWindowListener() { 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     setVisible(false); 
    } 
} 

Was will ich tun ist, wenn ich auf die Schaltfläche „voltar“ (die in einem anderen Fenster ist, nicht auf der „main“ ein, wie Sie sehen können) Es schließt die Fenster, aber nicht die App selbst. Die setVisible-Zeile gibt mir einen Fehler darüber, dass ich nicht auf einen statischen Kontext verweisen kann, den ich verstehe, weil ich die Referenz des Frames brauche. Wie löse ich das?

EDIT: JFrame zu JDialog geändert, aber immer noch keinen Erfolg. Beide Fenster werden heruntergefahren.

Vielen Dank im Voraus, Diogo Santos

+1

Ihre GUI sollte nur ein Hauptanwendungsfenster haben - einen JFrame. Alle anderen untergeordneten oder abhängigen Fenster sollten JDialogs sein, keine JFrames. Wenn diese geschlossen werden, kann die Anwendung nicht geschlossen werden. –

+0

Siehe auch [Die Verwendung mehrerer JFrames, gute/schlechte Praxis?] (Http://stackoverflow.com/questions/9554636) –

+1

@HovercraftFullOfEels, Diese Frage wurde als ein Duplikat markiert von: http: // stackoverflow.com/questions/4268749/how-to-close-a-jframe-without-closed-the-main-program. Aber ich glaube nicht, dass es ein Duplikat ist, also habe ich die Frage erneut eröffnet. Diese Frage bezieht sich auf 'Die setVisible-Zeile gibt mir einen Fehler darüber, dass von einem statischen Kontext, den ich verstehe, nicht referenziert werden kann, da ich die Referenz des Frames benötige. Wie löse ich das? ' – camickr

Antwort

1

Die setVisible Linie gibt mir eine Fehlermeldung über, dass es nicht von einem statischen Kontext Bezug genommen werden kann, die ich verstehe, weil ich den Bezug des Rahmens muß. Wie löse ich das?

Sie können auf die Komponente zugreifen, die das Ereignis generiert hat. Dann können Sie das Fenster finden, zu dem die Komponente gehört. Dies werden Sie generischen Code jedes Fenster zu verstecken:

//setVisible(false); 
JButton button = (JButton)e.getSource(); 
Window window = SwingUtilities.windowForComponent(button); 
window.setVisible(false); 

Sie können auch Closing an Application überprüfen. Die ExitAction kann zu Ihrer Schaltfläche hinzugefügt werden. Wenn Sie jetzt auf den Button klicken, wird es wie mit dem "x" (Schließen) Button des Fensters. Dies ist die Standard-Schließoperation, die Sie für das Fenster angeben.