Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich möchte einen modalen JDialog öffnen. Jetzt soll bei einem Klick auf einen Button in dem JDialog ein weiterer JDialog geöffnet werden, in dem z.B. eine Vorschau angezeigt wird oder eine Website o.ä.
Eigentlich hab ich gedacht, dass das ziehmlich einfach sein müsste, aber ich habs jetzt mit JDialog und auch mit JFrame versucht aber das Problem ist, dass ich den 2. Dialog, nachdem er geöffnet wurde, erst schließen kann, wenn der 1. Dialog geschlossen wurde. Davor reagiert er auch z.B. der WindowListener nicht. Ich weiß nicht genau warum das so ist und vor allem weiß ich auch nicht wie sich das Problem lösen lässt. Wenn der 1. Dialog nicht modal ist, lässt sich das zusätzliche Fenster normal schließen.
Ich schreibe hier mal eine ganz einfache Testklasse hin, mit der man das Problem sehen kann.
Code:
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
public class Test2 {
public Test2() {
JDialog test = new JDialog();
test.setModal(true);
JButton button = new JButton("Open Window");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog window = new JDialog();
window.add(new JLabel("Test"));
window.pack();
window.setVisible(true);
}
});
test.add(button);
test.pack();
test.setVisible(true);
}
public static void main(String[] args) {
Test2 test = new Test2();
}
}
Also wenn ich setModal(true) weglasse, dann ist der 1. Dialog ja nicht mehr modal. Das ist ja das Problem, wenn er nicht modal ist, funktioniert alles, dann lässt sich der 2. Dialog schließen, aber nicht wenn er modal ist.
Also ich versuch noch mal genauer zu erklären warum ich das brauche.
Wenn der Benutzer z.B. einen modalen Dialog aufruft und dort irgendwelche Eingaben macht, dann möchte ich es z.B. ermöglichen, dass gleichzeitig die Hilfe geöffnet werden kann oder offen ist. D.h. aber dass alles andere blockiert bleiben muss nur die Hilfe und der modale Dialog funktionieren halt.
@Bleiglanz
also wenn ich dem 2. Dialog den 1. Dialog als owner übergebe, funktioniert das schließen, der 2. Dialog wird dann aber mitgeschlossen, wenn der 1. geschlossen wird (geht vielleicht, ist aber vielleicht nicht so praktisch). Wenn ich einen anderen JFrame als owner übergebe, lässt sich der 2. Dialog wieder nicht schließen.
So klappt es jetzt auch fast so wie ich es gerne hätte. Nur ist jetzt der 2. Dialog 'abhängig' vom 1. Dialog. Der 2. Dialog ist immer über dem 1. Dialog und wenn der 1. Dialog geschlossen wird, schließt sich auch der 2.
Gibt es eine Möglichekeit, dass ein bestimmtes Fenster/Dialog immer 'benutzbar' bleibt, eben wie eine Hilfe, die sich nicht schließt, wenn man den 1. Dialog schließt, und die auch im Hintergrund geöffnet bleiben kann?
Ich habe zwar nicht den ganzen Thread verfolgt oder den geposteten Code
analysiert, aber ich frage mal ganz dumm: Was hindert dich daran einen
nicht-modalen Dialog oder einfach ein weiteres JFrame für deine Hilfe zu
nehmen?
Wenn Aktivitäten (Benutzen eines Sliders, Auswählen eines Radio-Buttons, ....)
in deinem Dialog-Frame ausgeführt werden kann doch einfach eine zugeordnete
Methode des Hauptfensters ausgeführt werden.
Oder verstehe ich da was falsch?
Oder ist heute schon Freitag? :shock:
Also ich weiß nicht, ob ich das jetzt richtig verstehe, was Du meinst.
Ich habe schon versucht, aus dem 1. Dialog eine Methode aufzurufen, die in einer anderen Klasse liegt (diese ist abgeleitet von JFrame) die dann einen weiteren Dialog erstellt u. öffnet mit dem JFrame als owner, aber dabei ist es genauso. Der 2. Dialog hängt irgendwie mit dem 1. Dialog zusammen, man kann ihn nicht schließen, erst wenn der 1. Dialog geschlossen ist.
Ich hab schon ziehmlich viel hin und her probiert habs aber nicht hinbekommen.