JDialog hat seltsames Design

Status
Nicht offen für weitere Antworten.

roddy

Aktives Mitglied
Hallo zusammen,

Ich starte einen Dialog "aus dem Nichts" (will sagen: Der nicht zu einem Frame 'gehört') und innerhalb des Dialogs starte ich in einem ActionListener einen weiteren Dialog. Kurzgefasst sieht das ganze also so aus:

Code:
JFrame nullframe = new JFrame("blabla");
final JDialog dialog = new JDialog(nullframe,"TITEL",true);
dialog.setDefaultLookAndFeelDecorated(true);
final myBoolean rerun = new myBoolean(false); // Eine Klasse die nichts anderes macht als einen boolschen Wert zu 
// speichern, mit set zu verändern und mit get auszugeben. Da ich eine final boolean nicht einfach mit 'rerun = true' 
// hätte zuweisen können  innerhalb des actionlisteners.

final JPanel panel = new JPanel();

ActionListener listener0 = new ActionListener(){ public void actionPerformed(ActionEvent e){
     final JDialog unterDialog = new JDialog(dialog,"TITEL",true);
     unterDialog.setDefaultLookAndFeelDecoreated(true);
     JPanel unterPanel = new JPanel();

     ActionListener unterListener0(){ public void actionPerformed(ActionEvent e){
          rerun.setValue(true);
          unterDialog.dispose();
          dialog.dispose();
     }
     JButton unterButton0 = new JButton("Schließen");
     unterButton0.addActionListener(unterListener0);
     unterPanel.add(unterButton0);
     unterDialog.getContentPane().add(unterPanel);
     unterDialog.setVisible(true);
}
JButton button0 = new JButton("Unterdialog öffnen");
button0.addActionListener(listener0);
panel.add(button0);

ActionListener listener1 = new ActionListener(){ public void actionPerformed(ActionEvent e){
     // veränder ein paar Werte
     rerun.setValue(true);
     dialog.dispose();
}
JButton button1 = new JButton("Was verändern");
button1.addActionListener(listener1);
panel.add(button1);

ActionListener listener2 = new ActionListener(){ public void actionPerformed(ActionEvent e){
     rerun.setValue(false);
     dialog.dispose();
}
JButton button2 = new JButton("fertig, weiter im Text");
button2.addActionListener(listener2);
panel.add(button2);

dialog.getContentPane().add(panel);
dialog.setVisible(true);
if (rerun.getValue()){
     return dieseMethodeHier(mit den Übergabewerten die oben bei den Listenern verändert wurden);
}
else {
     übergib die veränderten Werte der nächsten Methode
}

Ich habe also 3 Knöpfe:

- der erste öffnet einen Unterdialog, in dem Werte verändert werden. Dieser Dialog hat oft schon das "falsche" aussehen, d.h. das Design von der TitleBar usw. ist nicht mehr das standart Look & Feel, wie ich es haben möchte
- der zweite Knopf schließt den Dialog, um ihn wieder neu aufzubauen. Spätestens beim Neuaufbau hat dann mein Hauptdialog auch das "falsch" Design.
- der dritte Knopf macht den Dialog zu. Im weiteren Programmablauf kommen dann noch weitere JDialogs bzw. JOptionPanes, sie alle haben ebenfalls nicht mehr das standart L&F Design wie ich es haben möchte.

Hat jemand eine Idee, was ich falsch mache?
 
In Zeile 12 ist zum Beispiel ein Schreibfehler
unterDialog.setDefaultLookAndFeelDecoreated(true);
-> Das E muss raus.
 
OK, der ist aber im Programm nicht. Hab mal eben das wesentliche zusammengetippt weil da haufenweise Programmcode drumherum ist, der nichts mit dem JDialog zu tun hat und nur verwirren würde. Der obenstehende Code ist jedenfalls nicht copy+paste und Schreibfehler hätte ich denke ich beim compilieren bemerkt...
 
Hi,

wozu hast du denn die "setDefaultLookAndFeelDecorated" drin ? Die sind nämlich für dein Problem verantwortlich.

Gruß
Mag1c
 
Das Standard-LookAndFeel sollte doch eigentlich immer da sein. Das muss man doch nicht extra noch setzen oder seh ich da was falsch?
 
Also wenn Du mit dem Standart-Look-And-Feel das Java Look and Feel (JLF) meinst, daß müsste Standartmäßig drin sein, du kannst Di dann alerdings das setDefaultLookAndFeelDecorated sparen.
Ansosnten würde ich am Anfang deines Programms einfach den LookAnd Feel einstellen, z.B. so:
Code:
try 
{
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception exc) {
System.err.println("Error loading L&F: "+exc);
}
 
Jepp, das Standart L&F ist als Standart drin, ich weiss selbst nich mehr genau, warum ich erstmalig dieses setDefaultLookAndFeelDecorated verwendet habe. Mag1c hatte jedenfalls Recht, das hat den Fehler produziert. Danke für eure Antworten!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben