modalität weiterziehen?

Status
Nicht offen für weitere Antworten.
S

sime

Gast
Tag zusammen

sorry erstmal wegen dem titel.was besseres ist mir nicht eingefallen.

folgende situation ist gegeben.
in meiner main wird ein jdialog aufgerufen auf den die main wartet (modal).
in diesem jdialog ist eine jcombobox und ein bearbeiten-button.
mann kann also einen eintrag auswählen und diesen bearbeiten.
durch klick auf bearbeiten öffnet sich ein weiteres jdialog.

die aufgabestellung ist nun, falls der wert der jcombobox im zweiten dialog geändert wird zum ersten zurückzukehren, welcher natürlich aktualisiert sein muß.

ich dachte mir also, ich schliesse beim öffnen des zweiten jdialog den ersten einfach und rufe ihn dann aus dem zweiten wieder auf wenn dieses geschlossen wird.
leider komme ich da dann eben an das problem das der erste jdialog nichtmehr an die main gebunden ist.

ich bin erst anfänger was java angeht hoffe also auf verständnis falls ich das ganze total falsch angehe.
würde mich über jegliche hilfe freuen und sag schonmal danke im voraus

gruß sime
 

L-ectron-X

Gesperrter Benutzer
Schreibe mindestens zwei Klassen, die von JDialog abgeleitet sein müssen.
Dialog A übergibt dem Dialog B eine Referenz von sich selbst (this). Somit ist Dialog B sein Aufrufer bekannt.
Wenn sich nun in Dialog B etwas ändert, bzw. es notwendig wird Dialog A zu öffnen, übergibt du, falls notwendig über die bekannte Referenz Daten an Dialog A und schließt Dialog B mit dispose().
Eine dritte Klasse kann die main()-Methode enthalten und das ganze Programm starten. Es ist auch OK, wenn du die main()-Methode in Dialog A implementierst.
 
S

sime

Gast
hmm...danke schonmal für die antwort.
teoretisch verstanden hätt ich es ja, nur an der umsetzung scheitert es momentan noch.
vielleicht hat jemand ein simples beispiel für mich?
dank im voraus

sime
 

Ilja

Bekanntes Mitglied
die Aufrufende Klasse A soll eine referenz auf sich mitgeben (über eine Methode in B), bevor du den Dialob B einblendest!
Wenn B geschlossen werden soll, dann Übergib die Ergebnisse an A mithilfe einer Methode von A

Pseudo:
im Dialog A:
B = new Object();
B.setParent(this);
B.setVisible();
...
in B beim Schließen:
parent.setWert(wasauchimmer);
parent.textfeld.refresh();
B schließen
...
 

L-ectron-X

Gesperrter Benutzer
Wozu gibts Konstruktoren?
Hier mal ein funktionsfähiges Beispiel. Viel Spaß beim Ausprobieren. :)

Klasse DialogA
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class DialogA extends JFrame implements ActionListener {
   private JLabel label;
   private JButton button;
   private DialogB dialog;
   
   public DialogA(String title) {
      super(title);
      setSize(400, 300);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      
      label = new JLabel("Das ist DialogA");
      label.setHorizontalAlignment(SwingConstants.CENTER);
      add(label);
      
      button = new JButton("DialogB öffnen");
      button.addActionListener(this);
      add(button, BorderLayout.SOUTH);
   }
   
   public void actionPerformed(ActionEvent e) {
      dialog = new DialogB(this, true); //DialogB öffnen
      dialog.setVisible(true);
   }
   
   public void setValue(String value) {
      label.setText(value);
   }

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {}
      new DialogA("DialogA").setVisible(true);
   }
}

Klasse DialogB
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class DialogB extends JDialog implements ItemListener {
   private String value;
   private DialogA dialog;
   private JComboBox combobox;

   public DialogB(final DialogA dialog, boolean modal) {
      super(dialog, "DialogB", modal);
      this.dialog = dialog;
      setSize(200, 150);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
      
      JPanel panel = new JPanel();
      combobox = new JComboBox(new String[] {
         "Eins", "Zwei", "Drei", "Vier", "Fünf"
      });
      combobox.addItemListener(this);
      
      panel.add(combobox);
      add(panel);
      
      addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
            dialog.setValue("In DialogB ausgewählt: "+value); //Text von JLabel in DialogA setzen
            dispose(); //Fenster schließen
         }
      });
   }
   
   public void itemStateChanged(ItemEvent e) {
      if(e.getStateChange() == ItemEvent.SELECTED) {
         value = (String)combobox.getSelectedItem(); //ausgewählten Wert in Variable speichern
      }
   }
}
 
S

sime

Gast
Sorry für die verspätete Antwort.
Hat gut geklappt mit dem Beispiel bzw. mir den Weg dahin gezeigt.
Danke für die Hilfe
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
VfL_Freak Modalität von FileDialog AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben