Aufruf der frame.getRootPane().setWindowDecorationStyle über ActionListener

  • Themenstarter Themenstarter martin987
  • Beginndatum Beginndatum
M

martin987

Heyho,

ich hab ein Problem beim UI von einem Programm.
Und zwar: über einen MouseListener erkennt das Programm, wenn der Benutzer in ein JTable klickt. Anschließend öffnet sich ein JFrame, der nähere Infos zu der jeweiligen Spalte gibt. Die Schwierigkeit ist nun, dass dieser JFrame das Look And Feel eines JDialogs haben sollte.
Dies wird ja für gewöhnlich über die Methoden
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
erreicht. In meinem Programm werden diese nach der Erstellung des Frames (JFrame frame = new JFrame()) ausgeführt.
Hierbei erscheint aber nur ein Frame komplett ohne Rahmen etc., es wird also nur die erste Methode (frame.setUndecorated(true)) ausgeführt.
Somit scheint die zweite Methode (frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG)) nicht ausgeführt zu werden. Dieses Problem stellt sich jedoch nur bei Aufruf der Methode über einen Listener bzw. über externen Aufruf. Wenn ich die Methoden beispielsweise in das "Haupt-" Frame einbaue, funktionieren sie einwandfrei.

Die Frage ist nun, ob jemand eine Idee hat, woran das liegen könnte bzw. ob das überhaupt lösbar ist.


Danke im Voraus!

Gruß,
Martin
 
Hi!
Ohne relevanten Quellcode wird dir das niemand beantworten können.
Die Frage, die sich mir noch zusätzlich stellt, ist aber: Wieso erstellt du ein Frame, und lässt es wie einen Dialog aussehen? Warum nimmst du nicht gleich einen Dialog?

*grüssle*
 
Hi Artorius,

Danke für deine Antwort.

Hier der Code.. (gekürzt):
Java:
private void jTableEinzelnTeleNrMouseClicked(java.awt.event.MouseEvent evt) {
	if ((evt.getButton() == MouseEvent.BUTTON3) && (evt.getClickCount() == 2)) //wenn Rechtsklick(Button3) und Doppelklick   {
                JFrame jFrameTeleNr = new JFrame();
                JTextArea jTextAreaTeleNr = new JTextArea();
    		
                jTextAreaTeleNr.setEditable(true); //editierbar
                jTextAreaTeleNr.setLineWrap(true);	//automatischer Zeilenumbruch
    		JScrollPane jScrollPaneTextAreaTeleNr = new JScrollPane();
    		jScrollPaneTextAreaTeleNr.setViewportView(jTextAreaTeleNr);
    		jFrameTeleNr.add(jScrollPaneTextAreaTeleNr);
            
    		jFrameTeleNr.setSize(250, 150);

    		jFrameTeleNr.setUndecorated(true); //Methode1
    		jFrameTeleNr.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG); //Methode2 -> funktioniert nicht
                jFrameTeleNr.setVisible(true);
        }
}

Wie gesagt, bis auf die oben als Methode 2 gekennzeichnete Methode, funktioniert's.


Der Punkt, warum ich einen Frame verwende ist, dass im JFrame eine TextArea ist; Es soll auch nur ein Frame mit einer TextArea sein, ansonsten nichts (außer Umrandung des Frames + Schließen - X).
 
Zuletzt bearbeitet von einem Moderator:
Für Syntax-Hightlight:
Schreibe vor den Code [ code=java ] und danach [ /code ] (ohne Leerzeichen).
Für normalen Code das gleiche, nur dann eben [ CODE ].

//Edit:
Danke, Maik. Gibt es Swing-Highlight?
Ich sehe eigentlich keinen Unterschied zu normalem Code...
 
Der Punkt, warum ich einen Frame verwende ist, dass im JFrame eine TextArea ist; Es soll auch nur ein Frame mit einer TextArea sein, ansonsten nichts (außer Umrandung des Frames + Schließen - X).

Versteh ich immer noch nicht. Was hindert dich daran, das ganze in ein JDialog anstatt eines JFrames zu stecken?

Den Code formatieren kannst du mit [C O D E] [/C O D E] bzw. [J A V A] [/J A V A ] (ohne die Leerzeichen)

*grüssle*

Edit: An deinem Code kann ich übrigens nichts feststellen. Der sieht in Ordnung aus, und lässt sich bei mir auch wunschgemäß ausführen.
 
Zuletzt bearbeitet:
@all: Wenn ihr in euren Beiträgen zusätzlich den [plain ] [ /plain]-Tag nutzt, sind die Leerzeichen in den Tags nicht vonnöten :)

[code] [/code], [code=java] [/code], [code=swing] [/code], ...

mfg Maik
 
Danke fürs Nachbessern, Maik ;)

@ Artorius: Ich dachte eigentlich, dass es einfacher wär, dem JFrame einfach eine JTextArea hinzuzufügen und das Look And Feel des Frames dann zu ändern. Inzwischen zweifel ich daran aber...^^.
Der Code läuft bei dir also so, wie er soll? Sprich: der JFrame nimmt das PLAIN_DIALOG Look And Feel an?
Wie gesagt, bei mir entfernt er nur die Decoration, das "setWindowDecorationStyle" haut nicht..

Gruß,
Martin
 
Huhu nochmal,

Hab's mir jetzt mal als JDialog angesehen.. Ist im Grunde genau das, was ich beschrieben hab/wollte - Vielen Dank Artorius.

Trotzdem fänd ich's doch ganz interessant, zu wissen, warum das mit dem JFrame nicht so geklappt hat, wie ich's wollte..

Gruß,
Martin
 
Wie gesagt, an dem Codestück, welches du gepostet hast, seh ich nichts falsches...
Da du ja nicht den kompletten Code gepostet hast, fehlt wohl irgendwas, was dann letzten Endes für den Fehler verantwortlich war. Bin allerdings kein Hellseher ;)

*grüssle*
 
Zurück