Controls einem Dialog uebergeben

  • Themenstarter Themenstarter gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

gast

Gast
Hallo,

ich moechte ueber einen Button in meinem JFrame einen Dialog aufrufen. Diesem Dialog wollte ich die Referenzen meiner Controls (die sich im JFrame befinden) im Konstruktor uebergeben. Vom Dialog aus wollte ich dann z. B. die Checkbox des JFrames aktivieren.
Ich wollte das eigendlich so machen, wie unten im Beispielcode beschrieben. Das Problem ist aber, wenn man beispielsweise 25 Controls uebergeben wollen wuerde. Das waere ja mal ein maechtig langer Konstruktor...
Wie wuerdet Ihr das machen?

Beispiel von mir:

Code:
public class MyFrame extends javax.swing.JFrame {

    public MyFrame() {
    }

    ...

    private void jButtonOpenDialog(java.awt.event.ActionEvent evt) 
    {                                                  
            // Dialog aufrufen und dabei die beiden Checkboxes des JFrames uebergeben        
            AboutDialog about = new AboutDialog(null, true, jCheckbox1, jCheckbox2);
            about.setSize(329, 180);
            about.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            about.setVisible(true);

    }
}

// die Klasse AboutDialog ------------------------------------------

public class AboutDialog extends java.awt.Dialog {

    private JCheckBox jCheckbox1;
    private JCheckBox jCheckbox2;

    public AboutDialog(java.awt.Frame parent, boolean modal, JCheckBox jCheckbox1, JCheckBox jCheckbox2) {
        super(parent, modal);

        this.jCheckbox1 = jCheckbox1;
        this.jCheckbox2 = jCheckbox2;

        enableCheckboxes();

    }
 
    private void enableCheckboxes()
    {
         jCheckbox1.setEnabled(true);
         jCheckbox2.setEnabled(true);
    }

}

Achso. Bitte nicht wundern: Dieses Programm ist natuerlich absolut sinnfrei. Es soll nur die Idee verdeutlichen.

Danke im vorraus
Simon
 
Ueber "Java.awt.Frame parent" kann ich ja leider nicht auf die Controls des JFrames zugreifen, weil die ja private deklariert sind. *gruebel*
 
Warum willst du die Controls unbedingt vom Frame zum Dialog übergeben?

Male deinen Dialog so wie du willst, und gib dann dem Frame die Möglichkeit, die Werte auszulesen, in dem du einfach im Dialog Zugriffsmethoden bereitstellst:
Code:
//in AboutDialog
public boolean isOption1Checked() {
   return jCheckBox.isSelected(); 
}

Das JFrame sollte sich nicht darum kümmern, wie der Dialog zu seinen Werten kommt (vielleicht willst du ja mal die CheckBoxes durch ToggleButtons ersetzen oder so), sondern nur um die Werte selber. Der Dialog sollte wiederum möglichst wenig über das JFrame (und gar nichts über die verwendeten Komponenten) wissen.
 
Hallo ich bins nochmal.
wenn Du aber wie in deinem Beispiel unten die jCheckbox1 im AboutDialog verwendest, dann muss es ja zuvor schon als Referenz dem Dialog uebergeben worden sein. Anderenfalls waere dem Dialog die Checkbox ja unbekannt.

Code:
//in AboutDialog
public boolean isOption1Checked() {
   return jCheckBox.isSelected();
}

Ich will nochmal kurz erlaeutern, was ich in etwa vorhabe:

1. Klick auf Button im JFrame
2. Button-Ereignishandler ruft den AboutDialog auf
3. Im AboutDialog befindet sich auch ein Button, der wiederum die Methode enableCheckboxes() aufruft.
Der Klick auf diesen Button soll also bewirken, dass die Checkboxes im JFrame aktiviert werden.

PS: Ich weiss - enableCheckboxes() wurde in meinem vorherigem Beispiel im Konstruktor aufgerufen und nicht ueber einen Button. Aber es passiert im Prinzip ja das selbe.

Wie waere es hiermit:

1. Implementierung einer Methode im JFrame wie folgt:
Code:
public void SetCheckboxStatus(boolean b_status)
{
     jCheckbox1.setEnabled(b_status);
     jCheckbox2.setEnabled(b_status);
}
1. Klick auf Button im JFrame
2. Button-Ereignishandler ruft den AboutDialog auf. Im Konstuktor des AboutDialogs befindet sich eine this-Referenz, also eine Referenz auf meinen JFrame (nenne ich jetzt mal my_frame).
3. Aufruf von my_frame.SetCheckboxstatus(true); in AboutDialog

Wie wuerdet Ihr das machen? Eine andere Moeglichkeit waere noch das ganze ueber eine Datei zu machen. D. h. in Aboutdialog den Status in der Datei setzen und im JFrame wieder auslesen.... Da ich aber in einem anderen Prog etwas aehnliches mache, nur ueber einen TimerThread mit hoher Taktfreq. finde ich diese Verfahrensweise etwas unpassend, da Dateizugriffe ja relativ rechenintensiv sind.

Danke vorweg und froehliches Uhrenzurueckdrehen ;-)
Simon
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben