JDialog öffnen und Fenstergrößenproblem

Status
Nicht offen für weitere Antworten.

Daniel_L

Bekanntes Mitglied
Hallo,

vorweg: ich arbeite mit Mac OS X, Netbeans 6.1 und Java/JDK 6.

Ich habe folgendes Problem, und zwar möchte ich einen längeren Prozess (Import von Daten) in zwei Schritte aufteilen. Zuerst wird ein JDialog geöffnet und die Daten abgefragt (z.B. Dateipfad und Dateityp). Wenn dieses Fenster geschlossen wird, wird ein zweiter JDialog geöffnet, der die entsprechenden Parameter des ersten JDialogs erhält, und in diesem 2. Dialog wird ein Background-Task mit dem eigentlich Importvorgang gestartet.

Mein Problem: Der 2. Dialog hat genau die gleiche Fenstergröße wie der erste, obwohl er eigentlich eine ganz andere Größe haben sollte. Hier etwas Source-Code, wie ich das ganze durchführe:

Die beiden Dialoge werden als globale Variablen deklariert:

private CImport importWindow;
private CImportDlg importDlg;

Nun die Methode, die die beiden Dialoge nacheinander öffnet (den 2. erst, wenn der erste geschlossen wurde):


Code:
    @Action
    public void ImportWindow() {
        /**
         * opens the Import Dialog. This Class is responsible
         * for getting the relevant import data. the import task
         * itself (background task) will be started as another dialog,
         * when this one is closed
         */
        JFrame mainFrame = ZettelkastenApp.getApplication().getMainFrame();
        // if dialog window isn't already created, do this now
        if (null == importWindow) {
            // get parent und init window
            importWindow = new CImport(mainFrame,true);
            // center window
            importWindow.setLocationRelativeTo(mainFrame);
        }
        ZettelkastenApp.getApplication().show(importWindow);        
        /**
         * Here the data (filepath, filetype) from the import window
         * will be passed to another dialog window, which starts the
         * background task. these dialogs are separated because it looks
         * better to have a background task with progress bar in an own,
         * smaller dialog
         */
        // first check for valid return value. import is only started,
        // when the previous dialog wasn't cancelled or simply closed
        if (1 == importWindow.retval) {
            // if dialog window isn't already created, do this now
            if (null == importDlg) {
                importDlg = new CImportDlg(mainFrame,true,data,importWindow.filepath,importWindow.importType);
                // center window
                importDlg.setLocationRelativeTo(mainFrame);
            }
            ZettelkastenApp.getApplication().show(importDlg);
        }
        
        // just for testing, set the imported data into the textfield
        jEditorPane1.setText(data.getTest());
    }

Der Dialog selbst hat keine Main-Methode, sondern nur einen Konstruktor und eben Buttons, die weitere Befehle wie schließen, beenden etc. ausführen:

Code:
public class CImport extends javax.swing.JDialog {
        
    /** Creates new form CImport */
    public CImport(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        // reset variables
        retval = 0;
        importType = 0;
        // make all compononents invisible. the second parameter
        // indicates, how many components are invisible. the components
        // are "grouped" and can be selectivly made (in-)visible        
        setComponentsVisible(false,3);
        // initiate the combo box with items
        initComboBox();
    }

Nach diesem Prinzip funktionier auch der 2. Dialog:
Code:
public class CImportDlg extends javax.swing.JDialog {

    /** Creates new form CImportDlg */
    public CImportDlg(java.awt.Frame parent, boolean modal, CDaten d, File fp, int ip) {
        super(parent, modal);        
        initComponents();        
        
        jLabelMsg.setText(resourceMap.getString("importDlgMsg1"));
    }



Meine Frage ist nun: Wieso übernimmt der zweite Dialog, der im GUI-Designer Matisse eine ganz andere Größe und Form hat als der erste, beim Öffnen genau die Größeneinstellungen des ersten Dialogs?
 

Daniel_L

Bekanntes Mitglied
Aber das müsste doch entfallen, wenn man mit Matisse bzw. GUI-Designer arbeitet?

In diesem automatisch generierten Code von NetBeans steht bspw:

Code:
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addGap(6, 6, 6)
                                .addComponent(jComboBox_importType, 0, 322, Short.MAX_VALUE)
                                .addGap(192, 192, 192)))
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(6, 6, 6)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jRadioButton2)
                                    .addComponent(jRadioButton1)))
                            .addComponent(jLabel3))
                        .addContainerGap(141, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addGap(6, 6, 6)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(6, 6, 6)
                                        .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 390, Short.MAX_VALUE))
                                    .addComponent(jButton1)))
                            .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addGap(6, 6, 6)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(6, 6, 6)
                                        .addComponent(jLabelMsg))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jButton2)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 163, Short.MAX_VALUE)
                                        .addComponent(jButton3)))))
                        .addGap(118, 118, 118))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jComboBox_importType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jRadioButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jRadioButton2)
                .addGap(18, 18, 18)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton2)
                    .addComponent(jButton3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabelMsg)
                .addContainerGap())
        );

Vielleicht sollte ich einfach ein andere Layout statt Free Layout verwenden?

Wenn ich die AboutBox öffne, behält diese ja auch ihre Größe, die sie im GUI-Designer hat. Der erste Dialog ja auch. Nur der zweite nicht. Könnte es damit zusammenhängen, dass das Swing App Framework automatisch die Fenstergrößen etc. speichert (was es ja tut), und fälschlicherweise für den 2. Dialog dieselben Größeneinstellungen übernimmt, die gerade für den vorigen gespeichert wurden?
 

thE_29

Top Contributor
Naja, entweder sagst du setSize oder pack();

Bei pack(); wird der Dialog so groß wie die sichtbaren Komponenten! Maybe merkt sich Mac OS halt die size vom ersten und wendet es am 2ten Dialog an.

Probiere einfach pack vor dem show/setVisible(true)
 

Daniel_L

Bekanntes Mitglied
Sorry, das pack(); ist auch ganz am Ende des geschützten Code-Bereichs, den Matisse/Netbeans automatisch erstellt, vorhanden. Hatte oben nur einen Ausschnitt gepostet...
 

Daniel_L

Bekanntes Mitglied
Ok, er merkt sich doch die Fenstergrößen für die jeweiligen Dialoge. Nur beim ersten Öffnen haben die Dialoge nicht die Größe, die ich eigentlich laut Matisse/GUI-Designer dafür geplant habe... Dann muss ich das Problem wohl eher bei NetBeans suchen, oder aber mit einem "SetSize" einfach die Größe noch manuell setzen.
 

thE_29

Top Contributor
Komisch ist das allemal!
Da ja eigentlich ein pack dafür sorgen sollte, das der Dialog groß genug ist um alles anzuzeigen.
 

Daniel_L

Bekanntes Mitglied
Groß genug ist es auch, leider nur *zu* groß ;-) Der zweite Dialog sollte nicht so hoch sein, wird aber viel höher angezeigt...
 

Daniel_L

Bekanntes Mitglied
Ach ja, das Problem hat sich mittlerweile natürlich erledigt und aufgelöst:

Swing speichert automatisch alle Fenstergrößen, Splitpane-Positionen etc. pp., aber dazu muss jedes Fenster/Frame/Dialog einen eigenen Namen haben. In NetBeans kriegt jeder neue Dialog erstmal den Namen "Form", sodass sich die Fenstergrößen gegenseitig "überschreiben".

Erhält jeder Dialog einen eigenen Namen, sieht alles so aus wie im GUI-Designer erstellt, und auch veränderte Fenstergrößen werden automatisch gespeichert und beim nächsten Programmstart wiederhergestellt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
Z Swing Problem mit JDialog öffnen AWT, Swing, JavaFX & SWT 10
O JDialog anzeigen beim öffnen einer Datenbank AWT, Swing, JavaFX & SWT 4
G nur einen JDialog öffnen. AWT, Swing, JavaFX & SWT 3
F Eigenen JDialog öffnen? AWT, Swing, JavaFX & SWT 4
m@nu JDialog "auf" JDialog öffnen AWT, Swing, JavaFX & SWT 2
E JDialog mit count down timer AWT, Swing, JavaFX & SWT 1
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
A ViewController (IFrame) > Jdialog > Model AWT, Swing, JavaFX & SWT 1
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
B Eingaben im JDialog abwarten AWT, Swing, JavaFX & SWT 4
S Swing JDialog mit KeyEvent als Rückgabe AWT, Swing, JavaFX & SWT 1
stylegangsta JDialog bestimmte Zeilen kursiv AWT, Swing, JavaFX & SWT 20
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
T Event Handling JDialog schließen, sobald ein neuer erzeugt wird AWT, Swing, JavaFX & SWT 3
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
D Button auf geöffnetem JDialog AWT, Swing, JavaFX & SWT 5
N Definitionen JDialog AWT, Swing, JavaFX & SWT 7
L JDialog - Event wenn Parent größe ändert AWT, Swing, JavaFX & SWT 2
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
N Swing Fragen zu non-modal JDialog AWT, Swing, JavaFX & SWT 1
F Swing JDialog schließen - WindowListener bekommt dispose nicht mit AWT, Swing, JavaFX & SWT 0
N JDialog als Progress-Anzeige AWT, Swing, JavaFX & SWT 6
M JDialog statt JFrame AWT, Swing, JavaFX & SWT 22
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
M JDialog soll JFrame "blockieren" AWT, Swing, JavaFX & SWT 2
K JDialog zeigt Components nicht an AWT, Swing, JavaFX & SWT 3
S Jframe aus JDialog starten AWT, Swing, JavaFX & SWT 4
M JDialog übergibt eingaben nicht an aufrufende klasse AWT, Swing, JavaFX & SWT 15
S Assistent im JDialog AWT, Swing, JavaFX & SWT 7
H Swing JDialog cannot be resolved as a typ AWT, Swing, JavaFX & SWT 12
C Swing JDialog "flutet" den Arbeitsspeicher AWT, Swing, JavaFX & SWT 9
S Swing Eigenen JDialog mit Rückgabewert AWT, Swing, JavaFX & SWT 3
C Swing JDialog Ladebildschirm wird nicht angezeit AWT, Swing, JavaFX & SWT 5
Jagson Mit JMenu auf jDialog zurück? Wie? AWT, Swing, JavaFX & SWT 8
A JDialog (modal) blockiert alle Fenster! AWT, Swing, JavaFX & SWT 2
Jagson Swing Von JDialog zu anderem JDialog wechseln AWT, Swing, JavaFX & SWT 2
S JDialog direkt über dem MainFrame aufpoppen lassen AWT, Swing, JavaFX & SWT 2
A Swing JDialog KeyBindings und Textfelder AWT, Swing, JavaFX & SWT 5
D Daten von JDialog an JTable in JFrame übergeben AWT, Swing, JavaFX & SWT 7
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
S JDialog per Button schließen AWT, Swing, JavaFX & SWT 2
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
N Swing Klasse erbt von JDialog - Problem mit innerer ActionListener-Klasse AWT, Swing, JavaFX & SWT 6
J Swing JDialog gleichzeitig mit JFrame anzeigen AWT, Swing, JavaFX & SWT 8
S Probleme jDialog einfügen AWT, Swing, JavaFX & SWT 4
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
S Schrift ändern in JDialog AWT, Swing, JavaFX & SWT 3
S Problem mit JDialog AWT, Swing, JavaFX & SWT 3
D Elternfenster vom JDialog aktualisieren oder nicht ? AWT, Swing, JavaFX & SWT 7
hdi Swing Genaue Funktionsweise von modalem JDialog? AWT, Swing, JavaFX & SWT 11
U JDialog ohne Taskleiste AWT, Swing, JavaFX & SWT 7
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
X JEditorPane Größe in JDialog automatisch anpassen AWT, Swing, JavaFX & SWT 2
Ollek JDialog Koponenten neu anordnen AWT, Swing, JavaFX & SWT 3
A JDialog AWT, Swing, JavaFX & SWT 10
Dit_ SwingUtilities.invokeLater und Modaler JDialog AWT, Swing, JavaFX & SWT 11
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A JDialog ausdrucken AWT, Swing, JavaFX & SWT 7
aze JDialog mit runden ecken AWT, Swing, JavaFX & SWT 8
Dit_ JDialog nur horizontal vergrößern AWT, Swing, JavaFX & SWT 3
C Swing JProgressBar in JDialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
M Swing Vererbung, Probleme mit JDialog AWT, Swing, JavaFX & SWT 12
H JDialog, Modal - Klassenübergreifend => Problem AWT, Swing, JavaFX & SWT 5
S Swing Bild (Gif) in Bitte warten JDialog AWT, Swing, JavaFX & SWT 6
U JFrame minimiert nach JDialog, JOptionPane AWT, Swing, JavaFX & SWT 3
K Swing JDialog aus Frame ausrufen AWT, Swing, JavaFX & SWT 2
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
B JDialog AWT, Swing, JavaFX & SWT 6
J Swing Probmel mit JDialog (Modal/FocusLost/Button) AWT, Swing, JavaFX & SWT 5
E Swing Fehlerhaftes Verhalten bei gleichzeitigen Verwendnen von PopUpMenu und JDialog?! AWT, Swing, JavaFX & SWT 5
J Swing JDialog mit static-Funktion anzeigen -> Rückgabewert AWT, Swing, JavaFX & SWT 3
E Daten von JDialog nach JFrame übertragen AWT, Swing, JavaFX & SWT 4
F ActionListener von JButton funktioniert mit JFrame aber nicht mit JDialog AWT, Swing, JavaFX & SWT 2
D Mehrere Comboboxen in JDialog AWT, Swing, JavaFX & SWT 2
F JDialog per Button schliessen - klappt nicht AWT, Swing, JavaFX & SWT 4
BattleMaster246 JDialog erscheint in der Taskbar AWT, Swing, JavaFX & SWT 7
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
P Swing eigenen Modalen JDialog AWT, Swing, JavaFX & SWT 6
J JDialog verliert Werte AWT, Swing, JavaFX & SWT 3
N Variablen an JDialog übergeben AWT, Swing, JavaFX & SWT 2
P Swing JDialog schliesst nicht AWT, Swing, JavaFX & SWT 2
X Swing JDialog von JInternalFrames überlappen lassen AWT, Swing, JavaFX & SWT 2
O JDialog-JScrollPane-JTable Problem AWT, Swing, JavaFX & SWT 3
N Swing Frage zu modalem JDialog. AWT, Swing, JavaFX & SWT 16
A JFrame oder JDialog AWT, Swing, JavaFX & SWT 12
B Swing JDialog : Herausfinden wie dieser beendet wurde? AWT, Swing, JavaFX & SWT 2
T JDialog ohne Fenstermanager? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben