# Geöffnetes Dialogfenster schließen



## DerSchlangen (3. Mai 2015)

Hallo zusammen,
ich muss zur Zeit für meine Weiterbildung Java lernen. Wir haben bisher nur kleinere Projekte in Java realisiert. Nun möchte ich das erste mal mit mehreren .class Dateien arbeiten. Ich habe den unteren Dialog aus einer anderen .class Datei aufgerufen, das klappt auch.
Mein Problem ist ich habe leider keine Ahnung wie ich das schließen realisiere. dialog.setvisible(false); funktioniert nicht.

Kann mir jemand weiterhelfen indem er mir erklären kann wie ich vorgehe wenn ich ein geöffnetes Fenster schließen will? Also nur den aufgerufenen Dialog nicht das gesamte Programm?

Anbei der Code des Dialogs, das Hauptprogramm kann bei bedarf nachgeliefert werden ist aber nichts anderes als ein Aufruf per Button etc.

Vielen Dank im vorraus!



```
package formulare;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import mainprog.WvS_ProjectDB;
public class Logindata_dialog extends JDialog {
 
 private static final long serialVersionUID = -8298102570486583361L;
 private final JPanel contentPanel = new JPanel();
 private JTextField text_dbHost;
 private JTextField text_dbPort;
 private JTextField text_dbDatabank;
 private JTextField text_dbUser;
 private JPasswordField pwd_dbPassword;

 public static void main(String[] args) {
  try {
   Logindata_dialog dialog = new Logindata_dialog();
   dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
   dialog.setVisible(true);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public Logindata_dialog() {
  setBounds(100, 100, 450, 300);
  getContentPane().setLayout(new BorderLayout());
  contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
  getContentPane().add(contentPanel, BorderLayout.CENTER);
  contentPanel.setLayout(null);
  
  JLabel lblHost = new JLabel("Host");
  lblHost.setBounds(15, 16, 69, 20);
  contentPanel.add(lblHost);
  
  JLabel lblPort = new JLabel("Port");
  lblPort.setBounds(15, 52, 69, 20);
  contentPanel.add(lblPort);
  
  JLabel lblDatenbank = new JLabel("Datenbank");
  lblDatenbank.setBounds(15, 88, 123, 20);
  contentPanel.add(lblDatenbank);
  
  JLabel lblUser = new JLabel("User");
  lblUser.setBounds(15, 124, 69, 20);
  contentPanel.add(lblUser);
  
  JLabel lblPassword = new JLabel("Password");
  lblPassword.setBounds(15, 160, 69, 20);
  contentPanel.add(lblPassword);
  
  text_dbHost = new JTextField();
  text_dbHost.setHorizontalAlignment(SwingConstants.RIGHT);
  text_dbHost.setText("localhost");
  text_dbHost.setBounds(125, 13, 288, 26);
  contentPanel.add(text_dbHost);
  text_dbHost.setColumns(10);
  
  text_dbPort = new JTextField();
  text_dbPort.setHorizontalAlignment(SwingConstants.RIGHT);
  text_dbPort.setText("3306");
  text_dbPort.setBounds(125, 49, 288, 26);
  contentPanel.add(text_dbPort);
  text_dbPort.setColumns(10);
  
  text_dbDatabank = new JTextField();
  text_dbDatabank.setHorizontalAlignment(SwingConstants.RIGHT);
  text_dbDatabank.setText("wvs_db");
  text_dbDatabank.setBounds(125, 85, 288, 26);
  contentPanel.add(text_dbDatabank);
  text_dbDatabank.setColumns(10);
  
  text_dbUser = new JTextField();
  text_dbUser.setHorizontalAlignment(SwingConstants.RIGHT);
  text_dbUser.setText("root");
  text_dbUser.setBounds(125, 121, 288, 26);
  contentPanel.add(text_dbUser);
  text_dbUser.setColumns(10);
  
  pwd_dbPassword = new JPasswordField();
  pwd_dbPassword.setHorizontalAlignment(SwingConstants.RIGHT);
  pwd_dbPassword.setBounds(125, 157, 288, 26);
  contentPanel.add(pwd_dbPassword);
  {
   JPanel buttonPane = new JPanel();
   buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
   getContentPane().add(buttonPane, BorderLayout.SOUTH);
   {
    JButton okButton = new JButton("OK");
    okButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent arg0) {  
      WvS_ProjectDB.setDbIpAdress(text_dbDatabank.getText()); 
      WvS_ProjectDB.setDbPort(text_dbPort.getText()); 
      WvS_ProjectDB.setDbName(text_dbDatabank.getText()); 
      WvS_ProjectDB.setDbUser(text_dbUser.getText()); 
      char[] zeichen = pwd_dbPassword.getPassword();
      String pwd_abfrage = new String(zeichen);
      WvS_ProjectDB.setDbUserPasswd(pwd_abfrage); 
      
     }
    });
    okButton.setActionCommand("OK");
    buttonPane.add(okButton);
    getRootPane().setDefaultButton(okButton);
   }
   {
    JButton cancelButton = new JButton("Cancel");
    cancelButton.setActionCommand("Cancel");
    buttonPane.add(cancelButton);
   }
  }
 }
}
```


----------



## Gucky (4. Mai 2015)

Versuch es mal mit dispose(), obwohl setVisible eigentlich funktionieren müsste. Zeig mal den Aufruf von setVisible(false)


----------



## DerSchlangen (4. Mai 2015)

Also das war einfach dialog.setvisible(false); in Zeile 110 eingefügt um das erstmal mit "OK" zum laufen zu kriegen.


----------



## Gucky (4. Mai 2015)

Dann versuch mal dispose()
Wenn das auch nicht klappt, überprüf mal, ob der ActionListener überhaupt aufgerufen wird.


----------



## DerSchlangen (4. Mai 2015)

Hallo,
Also Eclipse unterstreicht mir das dialog nicht den Begehl selber. Dachte aber ich mache es mit Dialog weil ich es ja in Zeile 28 29 und 30 so genannt habe :-/


----------



## Gucky (4. Mai 2015)

In 28 bis 30 bist du aber noch in keinem Objekt. Deshalb musst du this.dispose aufrufen.


----------



## DerSchlangen (4. Mai 2015)

Das verstehe ich jetzt nicht.
Ich möchte ja per Button das fenster schließen - also bin ich davon ausgegangen im Actionlistener einen Befehl einzugeben. Was genau bewirkt die von dir genannte Codezeile an genau dieser Stelle eigentlich?

Danke schonmal


----------



## Gucky (4. Mai 2015)

Die Codezeile von mir ist falsch, es muss Logindata_dialog.this.dispose() heißen.
Das bewirkt, dass du auf das Objekt zugreifst und nicht auf die unbekannte Instanz.
Hast du das Konzept von OOP verstanden?


----------



## DerSchlangen (4. Mai 2015)

Hi und Danke, jetzt klappt es.
Also OOP (Wenn du damit Objekt orientiertes programmieren meinst) ist jetzt kein Buch mit sieben Sigeln aber ich bin da auch jetzt nicht so der Profi. Mir fehlt halt öfters noch das Verständnis wann wo und wie ich Objekte anspreche besonders wenn ich mit mehreren Klassen arbeite.


----------



## Gucky (4. Mai 2015)

Dann verstehe ich deine Nachfrage auch. 
Ich rate dir dich damit weiter zu beschäftigen, weil das für das Verständnis von Java extrem wichtig ist.
Schreib einfach weiter fleißig Programme und vernachlässige Google nicht und das kommt von allein


----------



## DerSchlangen (5. Mai 2015)

Dankeschön für die aufmunternden Worte.
Bin ja mit dem Programm noch nicht am Ende. Das soll am Ende eine grafische Oberfläche für die Abfrage von Werten aus einer MySQL Tabelle werden. Sind da denke ich auf einem guten Weg nur wie bereits erwähnt arbeite ich das erste mal so richtig mit WindowBuilder und mehrklassiger GUI - und das kann ich (hoffentlich nur noch) nicht.

Auf jedenfall werde ich hier wohl öfter posten


----------



## Gucky (5. Mai 2015)

Das ist wie Fahrradfahren. Du musst es lernen und dann kannst du es ein Leben lang.

Ich freue mich darauf.


----------

