Anzeige:
Ergebnis 1 bis 10 von 10

Thema: [Swing] JDialog ohne parent JFrame?

  1. #1
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594

    [Swing] JDialog ohne parent JFrame?

    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

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    ÄH, was willst du genau? (Ich hab da irgendein Gefasel von JFrame verstanden, wie wärs mit Deutsch ?! )

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    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

  4. #4
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    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

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  5. #5
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    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

  6. #6
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    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

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  7. #7
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    nein this ist eine Refernz auf das jeweilige Objekt, in meinem Fall ein Objekt vom Typ MachinePanel

    Code:
    public class MachinePanel extends JPanel implements ActionListener{ ...
    in meiner ActionPerformed soll ein Objekt vom Typ MachineDailog erzeugt werden:

    Code:
    public class MachineDialog extends JDialog implements ActionListener
    { ...
    Diese bekommt im Konstruktor ein Frame und ein true übergeben, welches sie an den super Konstruktor übergibt.

    Code:
    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

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ü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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  9. #9
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    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

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  10. #10
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •