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):
Der Dialog selbst hat keine Main-Methode, sondern nur einen Konstruktor und eben Buttons, die weitere Befehle wie schließen, beenden etc. ausführen:
Nach diesem Prinzip funktionier auch der 2. Dialog:
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?
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?