Michael: modaler Dialog erstellen?

Ich bastle mir momentan für ein Programm ein GUI zusammen, welches unter anderem auch einen modalen Dialog verwenden sollte. D.h. der Benutzer müsste einige Daten im vorraus in Textfelder eingeben können (IP, Name z.B.) welche dann an das Hauptprogramm übergeben würden.

Ich hätte nun gerne einen JDialog (ich benutze Swing) welcher mir diese Daten mit JTextFields abfragt und sobald man auf ok klickt sollen diese Daten ans Hauptprogramm übergeben werden und das Hauptprogramm soll erscheinen. Ich habe schon mal einen Ansatz, komme aber nicht weiter..

Soweit mein Ansatz

ich besitze ein Hauptprogramm in einem JFrame (Variable heisst gui), dessen GUI fertig ist. Im Konstruktor dieses Gui rufe ich eine Methode auf, welche mir die Input-Maske (JDialog) kreiren soll. In dieser Methode kreiere ich ein JDialog wie folgt:

JDialog maskeLehrer = new JDialog(gui, "Bitte Parameter eingeben", true);
maskeLehrer.setSize(300,300);
maskeLehrer.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
maskeLehrer.setVisible(true);

Dieser Dialog erscheint auch, doch nun meine konkrete Frage:
Wie kriege ich Inhalte in diesen JDialog??

ich habs mit:     maskeLehrer.setContentPane(steuerungLehrerPanel);
versucht (steuerungLehrerPanel beinhaltet alle gui-komponenten für den dialog), doch es funktioniert nicht.

Eine weitere Frage:
Wie fange ich den Klick auf OK des Benutzers ab und gebe die Daten ans Hauptprogramm weiter?

Ich sehe leider nicht mehr durch, vielleicht könnte mir da jemand helfen?

Vielen Dank im vorraus!

Gruss, Michael

  1. Hallo erstmal.

    Wie kriege ich Inhalte in diesen JDialog??

    Hast Du Dir mal http://java.sun.com/docs/books/tutorial/uiswing/components/dialog.html und vor allem http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JDialog.html (ganz oben die Beschreibung) angeschaut?

    Generell schreibe ich aber immer eine eigene Klasse für Dialoge und leite diese von JDialog ab. Finde ich persönlich übersichtlicher, aber das ist wohl Geschmackssache.

    LG ausm Hesseland
    Lemmy

    --
    Wer seiner Frau gegenüber stets beteuert, dass DAS tatsächlich 30cm sind, darf sich nicht wundern, wenn sie nicht richtig einparken kann...
    1. Danke für die Links!

      Diese Links hab ich schon durchgelesen doch irgendwie haben Sie mich nur begrenzt weitergebracht, denn ich möchte ja nicht irgendwelche simplen Dialoge sondern sondern ein eigenes JDialog. Ich habe nun so eine Klasse geschrieben, welche von JDialog abgeleitet ist doch irgendwie spuckt die momentan noch fehlermeldungen aus. Hier die aktuelle Version der Klasse:

      import java.awt.event.*;
      import javax.swing.*;

      public class LehrpersonDialog extends JDialog implements ActionListener{

      private JTextField bedenkzeit = new JTextField();
        private JTextField anzSpielrunden = new JTextField();
        private JTextField konferenzZeit = new JTextField();
        private JTextField eintrittsWahrsch = new JTextField();

      boolean answer;

      public LehrpersonDialog(JFrame frame, String title, boolean modal) {
          super(frame, title, modal);
          try {
            initialisieren();
            pack();
          }
          catch(Exception ex) {
          }
        }

      public void initialisieren() throws Exception {

      this.add(bedenkzeit);
          this.add(anzSpielrunden);
          this.add(konferenzZeit);
          this.add(eintrittsWahrsch);

      JButton ok = new JButton();
          ok.setText("OK");
          this.add(ok);
          ok.setActionCommand("ok");
          ok.addActionListener(this);

      JButton abbrechen = new JButton();
          abbrechen.setText("Abbechen");
          abbrechen.addActionListener(this);
          abbrechen.setActionCommand("abbrechen");
          this.add(abbrechen);

      pack();

      this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
              setVisible(false);
              dispose();
            }
          });
        }

      public void actionPerformed(ActionEvent event) {
          String actionCommand = event.getActionCommand();
          if (actionCommand.equals("ok")) {
            answer = true;
            dispose();
          }
          if (actionCommand.equals("abbrechen")) {
            answer = false;
            dispose();
          }
        }

      public boolean showDialog(){
          setModal(true);
          //this.setLocationRelativeTo(Hauptfenster.getHauptfenster());
          show();
          return (answer);
        }

      public String[] getText(){
          String [] text = {bedenkzeit.getText(), anzSpielrunden.getText(),
              konferenzZeit.getText(), eintrittsWahrsch.getText()};
          return text;
        }
      }

      1. Guude!

        Diese Links hab ich schon durchgelesen doch irgendwie haben Sie mich nur begrenzt weitergebracht, denn ich möchte ja nicht irgendwelche simplen Dialoge sondern sondern ein eigenes JDialog.

        Dann abstrahiere ein wenig. In der Beschreibung zu JDialogs (http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JDialog.html) steht ganz oben:

        <cite>
        The JDialog component contains a JRootPane  as its only child. The contentPane should be the parent of any children of the JDialog. From the older java.awt.Window object you would normally do something like this:

        dialog.add(child);

        Using JDialog the proper semantic is:

        dialog.getContentPane().add(child);

        </cite>

        Also kannst Du bei Deiner Klasse keine Komponenten direkt dem JDialpg hinzufügen ("add(...)"), sondern musst die ContentPane verwenden ("getContentPane().add(...)").

        Ich habe nun so eine Klasse geschrieben, welche von JDialog abgeleitet ist doch irgendwie spuckt die momentan noch fehlermeldungen aus.

        Schön wäre es gewesen, wenn Du die Fehlermeldungen mitgepostet hättest.

        LG ausm Hesseland
        Lemmy

        --
        Wer seiner Frau gegenüber stets beteuert, dass DAS tatsächlich 30cm sind, darf sich nicht wundern, wenn sie nicht richtig einparken kann...
        1. Hallo !

          Using JDialog the proper semantic is:

          dialog.getContentPane().add(child);

          </cite>

          Also kannst Du bei Deiner Klasse keine Komponenten direkt dem JDialpg hinzufügen ("add(...)"), sondern musst die ContentPane verwenden ("getContentPane().add(...)").

          genau das war die Problematik und auch die Fehlermeldung! Ich hätte diesen Teil in der JAVA-Api genauer beachten sollen.. nun funktioniert es!! Vielen herzlichen Dank für deine Hilfe!!! ich bin nun glücklich ;-)

          Gruss, Michael