PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Swing] JDialog ohne parent JFrame?



fs111
07-07-2003, 16:45
Hallo Leute!

Blöder Titel, aber mir fiel nichts besseres ein. Also ich habe hier ein Problem, und zwar möchte ich einn JDialog erstellen, nachdem ein Knopf gedrückt wurde. Dieser Knopf bist aber nicht in einer Klasse, die JFrame erweiter, sondern befindet sich in einer Klasse, di Panel erweitert. Um einen JDIalog aber nun Modal zu bekommen, muss man ja das parent Frame mitübergeben. Wie komme ich daran, oder wie komme ich da drumherum?

Danke und Grüße

fs111

bischi
07-07-2003, 22:43
ÄH, was willst du genau? (Ich hab da irgendein Gefasel von JFrame verstanden, wie wärs mit Deutsch ?! ;) )

MfG Bischi

fs111
07-07-2003, 23:56
Folgendes, ich möchte einen Unterklasse von JDialog bilden, die nach einem ActionEvent (Druck auf Knopf) instantiiert wird. Dieser neue Dialog soll Modal sein, was man damit erricht, dass man dem super Konstruktor ein Frame (also das Parent Frame) und ein true übergibt. Leider befindet sich der Knopf nicht "direkt" in meinem Frame, sondern ist auf einer Containerklasse, die eine Unterklasse von Panel ist. Die Frage ist jetzt, wie biege ich dem JDialog bei, was sein parent Frame ist, damit meine Anwendung modal ist?

Hoffe das war verständlicher.

Grüße fs111

bischi
08-07-2003, 10:03
Ah, jetzt hab ichs verstanden:

etwa so:

JDialog dia = new JDialog(this, true);

Wenn du this übergibst, ist automatisch die Anwendung, aus welcher der Dialog gestartet wurde, der Besitzer. Das true musst du setzen, damit dein Dialog modal ist.

MfG Bischi

fs111
08-07-2003, 12:03
nein, genau das geht ja eben nicht, weil this ja kein frame ist, sondern ein Panel, wie ich ja schon dreimal geschrieben habe. Ich will einfach wissen, wie ich an das Frame herankomme, this ist es in keinem Fall.


Danke

fs111

bischi
08-07-2003, 12:30
Trotzdem dass du es schon 3 mal geschrieben hast: normalerweise (es wäre mir kein anderer Fall bekannt) ist this eine Referenz auf das aufrufende Programm.

Poste doch mal n bisserl Code, vielleicht sehe ich dann besser, was das Problem ist.

MfG Bischi

fs111
08-07-2003, 13:47
nein this ist eine Refernz auf das jeweilige Objekt, in meinem Fall ein Objekt vom Typ MachinePanel


public class MachinePanel extends JPanel implements ActionListener{ ...

in meiner ActionPerformed soll ein Objekt vom Typ MachineDailog erzeugt werden:


public class MachineDialog extends JDialog implements ActionListener
{ ...

Diese bekommt im Konstruktor ein Frame und ein true übergeben, welches sie an den super Konstruktor übergibt.


public MachineDialog(java.awt.Frame frame, boolean modal)
{
super(frame, true);
initComponents();

}


Wenn ich ein "this" übergebe, dann kann er nicht kompilieren, weil das aufrufende Objekt vom Typ MachinePanel ist, und nicht vom Typ Frame. Hoffe Du weißt nun was ich meine.

fs111

anda_skoa
08-07-2003, 23:09
Übergib einfach dem Panelkonstruktor den Frame, in dem das Panel ist und dann speicherst du ihn in einer Variable deines Panels.

Dann hast du die Frame Referenz zur Verfügung, wenn du den Dialog erzeugen willst.

Ciao,
_

bischi
09-07-2003, 08:35
OK, habs verstanden wie dus meinst: Du musst es aber so machen:

public class Fenster extends Frame
{
...
MachinePane mp = new MachinePane();
mp.MachineDialog(this , true);
...
}

public class MachinePane extends JPanel
{
...
public MachineDialog(java.awt.Frame frame, boolean modal)
{
super(frame, true);
initComponents();
}
...
}

Wenn du this auf diese Art verwendest, sollte es gehen. Sonst funktioniert Andas Variante auf jeden Fall.

MfG Bischi

fs111
09-07-2003, 10:14
Original geschrieben von anda_skoa
Übergib einfach dem Panelkonstruktor den Frame, in dem das Panel ist und dann speicherst du ihn in einer Variable deines Panels.

Dann hast du die Frame Referenz zur Verfügung, wenn du den Dialog erzeugen willst.

Ciao,
_

Ja, danke auf die Idee bin ich mittlerweile auch gekommen.

HAbs noch nicht getestet, aber sollte schon gehen.

Danke und Grüße

fs111