ERLEDIGT
JA
JA
ANTWORTEN
16
16
ZUGRIFFE
327
327
EMPFEHLEN
-
Hallo!
Momentan hole ich mir das mainFrame mit
Klasse xyz:
Code :1
JFrame mainFrame = Application.getInstance(test.main.HelperMain.class).getMainFrame();
Wobei HelperMain der FrameView ist.
Gibt es eine Möglichkeit sich den MainFrame zu holen ohne die Klasse angeben zu müssen.
Denn wenn man die Klasse xyz in einer anderen SingleFrameApplikation verwenden möchte, dann wirft er eine ClastCastException.
-
10.08.11 09:56 #2
Was genau willst du den mit diesem Code bezwecken?
-
Es geht um einige Dialogs die ich während der Applikation aufrufe.
Dort möchte ich ein setRelativeTo setzen, und das soll sich immer auf das mainFrame beziehen.
-
10.08.11 10:02 #4
Warum übergibst du das JFrame dann nicht einfach an den Dialog?
Andernfalls, falls du wieder nicht so viele Parameter übergeben willst, kannst du das auch folgendermaßen realisieren:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import javax.swing.JFrame; public class JWindow extends JFrame { private static JFrame mainFrame; public JWindow() { super("Test"); mainFrame = this; } /** * @return the mainFrame */ public static JFrame getMainFrame() { return mainFrame; } }
Dann musst du im Dialog natürlich nur noch vom Frame die Position abfragen und kannst anschließen die Position des Dialogs bestimmen.
-
Nach deinem Code müßte dann in jeder Applikation die Klasse mit dem FrameView gleich heißen.
Denn in der Klasse xyz verwende ich dann JWindow.getMainFrame();
Ich möchte aber unabhängig davon wie die FrameView-Klasse heißt das mainFrame bekommen.
-
11.08.11 14:54 #6
Das geht nicht (nichts das mir bekannt wäre). Du kannst nicht auf die Klasse JWindow/JFrame zugreifen, wenn du nicht über JWindow gehst. Selbst wenn du dir die Klasse JWindow via den ClassLoader in der jeweiligen Klasse lädst, musst du auch den JWindow-Pfad angeben.
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
11.08.11 15:46 #7
Ich muss mich mal eben selber korrigieren, es geht doch. Wenn du es wie in meinem Beispiel machst und dann in den jeweiligen Klassen (in denen du auf JWindow zugreifst) die Methode getMainFrame() als static import einbindest. Das geht wie folgt:
Code java:1
import static de.tutorials.JWindow.getMainFrame;
Ich hoffe das ist das was du brauchst.Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Hallo,
Es gibt doch eine getInstance-Methode, die kein Class-Objekt erfordert. Warum nutzt du nicht diese?
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Weil ich durch Application.getInstance()... kein MainFrame bekomme.
-
Das ist leider nicht das was ich möchte.
Das Ziel:
Ich hab 2 Applikationen:
App1
App2
Beide haben unterschiedliche FrameView-Klassen.
Beide verwenden irgendwo die Klasse xyz.
In der Klasse xyz möchte ich nun das mainFrame von der Applikation bekommen.
Da die Klasse xyz in beiden Applikationen verwendet wird, kann ich nicht per .getInstace(...class) drauf zugreifen, weil ich ja nicht weiß welche Klasse es ist.
Ich bräuchte quasi eine Funktion in der Applikation, wo ich sage setMainFrame( app1-FrameView).
Und in der xyz-Klasse dann: Application.getMainFrame().
Hoffe jetzt ist es verständlicher
-
12.08.11 08:45 #11
Dann schau dir das am besten mal in SWT die Klasse Display an (Methode: getCurrent()/findDisplay(Thread)). Das müsste genau das sein, was du haben willst. Wenn ich dich jetzt richtig verstanden habe
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Und wie würde ich diese in der Application verwenden?
-
12.08.11 09:21 #13
Hier mal ein Beispiel-Code:
Die Klasse JWindow:
Die Klasse JWindow extendest du bei der jeweiligen Klasse, die dein Fenster beinhaltet. Dann müsste es funktionieren.Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import javax.swing.JFrame; public class JWindow extends JFrame { private final JDisplay display; public JWindow(String title, JDisplay display) { super(title); this.display = display; } /** * @return the display */ public JDisplay getDisplay() { return display; } }

Die Klasse JDisplay:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
import java.awt.Window; import java.util.HashMap; import java.util.Map; public class JDisplay { private static Map<Thread, JDisplay> displays = new HashMap<Thread, JDisplay>(); public JDisplay() { displays.put(Thread.currentThread(), this); } /** * @return */ public static JDisplay getCurrent() { return displays.get(Thread.currentThread()); } /** * @return */ public JWindow getActiveWindow() { final Thread thread = Thread.currentThread(); final JDisplay display = displays.get(thread); Window[] windows = JWindow.getWindows(); if(windows == null) { return null; } for(int i = 0; i < windows.length; i++) { JWindow window = (JWindow) windows[i]; if(window.getDisplay().equals(display)) { return window; } } return null; } }
Die Klasse JDisplayTest: (zum Testen)
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public class JDisplayTest { /** * @param args */ public static void main(String[] args) { JDisplay display = new JDisplay(); JWindow window = new JWindow("Demo", display); window.setTitle("Demo"); window.setSize(400, 400); window.setDefaultCloseOperation(JWindow.EXIT_ON_CLOSE); window.setVisible(true); System.out.println("ActiveWindow="+JDisplay.getCurrent().getActiveWindow().getTitle()); } }
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
In deiner Main-Methode kannst du auf JDisplay zugreifen, logisch.
Aber wie würde es so aussehen:
Die Klasse JDisplayTest: (zum Testen)
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public class JDisplayTest { /** * @param args */ public static void main(String[] args) { JDisplay display = new JDisplay(); JWindow window = new JWindow("Demo", display); window.setTitle("Demo"); window.setSize(400, 400); window.setDefaultCloseOperation(JWindow.EXIT_ON_CLOSE); window.setVisible(true); Xyz xyz = new Xyz(); } }
Code java:1 2 3 4 5 6 7
public class Xyz() { public xyz() { Hier möchte ich das mainFrame haben } }
Dass ich der Klasse xyz das JDisplay übergeben kann ist mir schon klar.
Das hier ist nur ein einfaches Beispiel. Die Klasse xyz ist ja viel tiefer, und man müßte dann das JDisplay Object immer mitschleppen.
Da kann ich dann gleich von MainFrame aus der JFrame mitschleppen
-
12.08.11 09:58 #15
Nein musst du nicht, da wo du das JWindow brauchst, machst du einfach den Aufruf:
...und das wars.Code java:1
JDisplay.getCurrent().getActiveWindow()
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
Ähnliche Themen
-
SingleFrameApplication - Preferences
Von hesk im Forum JavaAntworten: 9Letzter Beitrag: 10.08.11, 09:07 -
SingleFrameApplication - Exit/Quit/Shutdown
Von hesk im Forum JavaAntworten: 6Letzter Beitrag: 09.08.11, 10:29 -
Swing - SingleFrameApplication - Resources
Von hesk im Forum JavaAntworten: 13Letzter Beitrag: 09.08.11, 08:45 -
JSF Applikation innerhalb einer JSF Applikation
Von Chefkoch333 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 12.10.07, 13:21 -
MFC View aus MainFrame?
Von Codex27 im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 06.06.06, 21:45





Zitieren


Login





