{"id":3247,"date":"2015-11-25T19:50:29","date_gmt":"2015-11-25T17:50:29","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3247"},"modified":"2015-11-25T19:50:29","modified_gmt":"2015-11-25T17:50:29","slug":"inselraus-swing-jrootpane-jdesktoppane","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2015\/11\/inselraus-swing-jrootpane-jdesktoppane\/","title":{"rendered":"Inselraus: Swings JRootPane und JDesktopPane"},"content":{"rendered":"<p>Unter den JComponent-Objekten gibt es einige ausgezeichnete, die als Container f\u00fcr andere Kinder fungieren.<\/p>\n<h3>Wurzelkomponente der Top-Level-Komponenten (JRootPane)<\/h3>\n<p>Die Komponenten JFrame, JDialog, JWindow, JApplet und JInternalFrame enthalten als einziges Kind den leichtgewichtigen Container JRootPane. Die Methode getRootPane() liefert dieses JRootPane-Objekt. Die JRootPane verwaltet eine Layered Pane, die wiederum Content-Pane und Men\u00fc aufnimmt, und eine Glass-Pane, die wie eine Glasscheibe \u00fcber allen anderen Komponenten liegt. Sie kann Ereignisse abfangen oder in einer paint(\u2026)-Methode etwas \u00fcber alle Komponenten zeichnen.<\/p>\n<p>Beispiel:\u00a0Weise der Glass-Pane einen wartenden Cursor zu:<\/p>\n<pre>Component\u00a0c\u00a0=\u00a0getRootPane().getGlassPane();\r\n if(\u00a0c\u00a0!=\u00a0null\u00a0)\r\n \u00a0\u00a0c.setCursor(\u00a0Cursor.getPredefinedCursor(\u00a0Cursor.WAIT_CURSOR\u00a0)\u00a0);<\/pre>\n<h3>\u00a0JDesktopPane und die Kinder von JInternalFrame<\/h3>\n<p>Die JDesktopPane ist eine Unterklasse von JLayeredPane und als Container f\u00fcr interne Fenster \u2013 also Objekte vom Typ JInternalFrame \u2013 gedacht. Mit internen Fenstern (engl. internal frames) lassen sich MDI-Applikationen implementieren, also GUI-Anwendungen, bei denen nicht das grafische Betriebssystem die Fenster verwaltet, sondern die eigene Anwendung.<\/p>\n<p>Bevor ein JInternalFrame sichtbar wird, muss der Container erzeugt und sichtbar gemacht werden:<\/p>\n<pre>JDesktopPane\u00a0desktop\u00a0=\u00a0new\u00a0JDesktopPane();\r\n container.add(\u00a0desktop\u00a0);<\/pre>\n<p>Jetzt k\u00f6nnen beliebig viele JInternalFrame-Objekte erzeugt und auf der JDesktopPane platziert werden. Der einfachste Konstruktor ist der Standard-Konstruktor, der einen nicht vergr\u00f6\u00dferbaren, nicht schlie\u00dfbaren, nicht maximierbaren und nicht zum Icon verkleinerbaren JInternal-Frame ohne Titel erzeugt. Der ausf\u00fchrlichste Konstruktor erlaubt eine genaue Parametrisierung:<\/p>\n<pre>JInternalFrame\u00a0iframe\u00a0=\u00a0new\u00a0JInternalFrame(\u00a0title,\u00a0resizable,\u00a0closeable,\r\n \u00a0\u00a0maximizable,\u00a0iconifiable\u00a0);<\/pre>\n<p>Zwar gibt es nun ein Exemplar, doch w\u00e4re es nach dem Aufsetzen auf den Container noch nicht sichtbar:<\/p>\n<pre>iframe.setVisible(\u00a0true\u00a0);<\/pre>\n<p>Bis zur Vollst\u00e4ndigkeit fehlen aber noch die Ma\u00dfe:<\/p>\n<pre>iframe.setSize(\u00a0\/*\u00a0width\u00a0=\u00a0*\/\u00a0200,\u00a0\/*\u00a0height\u00a0=\u00a0*\/\u00a0100\u00a0);<\/pre>\n<p>Nun kann der iframe dem Container hinzugef\u00fcgt werden:<\/p>\n<pre>desktop.add(\u00a0iframe\u00a0);<\/pre>\n<p>In einem kompletten Programm kann das so aussehen:<\/p>\n<pre>package\u00a0com.tutego.insel.ui.swing;\r\n \r\n import\u00a0javax.swing.*;\r\n import\u00a0static\u00a0java.lang.Math.random;\r\n \r\n public\u00a0class\u00a0JInternalFrameDemo\u00a0{\r\n \r\n \u00a0\u00a0static\u00a0void\u00a0addInternalToDesktop(\u00a0JDesktopPane\u00a0desktop\u00a0)\r\n \u00a0\u00a0{\r\n \u00a0\u00a0\u00a0\u00a0JInternalFrame\u00a0iframe;\r\n \u00a0\u00a0\u00a0\u00a0iframe\u00a0=\u00a0new\u00a0JInternalFrame(\u00a0\"Ein\u00a0internes\u00a0Fenster\",\u00a0\u00a0\/\/\u00a0title\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0true,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u00a0resizable\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0true,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u00a0closeable\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0true,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u00a0maximizable\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0true\u00a0);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u00a0iconifiable\r\n \r\n \u00a0\u00a0\u00a0\u00a0iframe.setBounds(\u00a0(int)(random()\u00a0*\u00a0100),\u00a0(int)(random()\u00a0*\u00a0100),\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0100\u00a0+\u00a0(int)(random()\u00a0*\u00a0400),\u00a0100\u00a0+\u00a0(int)(random()\u00a0*\u00a0300)\u00a0);\r\n \u00a0\u00a0\u00a0\u00a0iframe.add(\u00a0new\u00a0JScrollPane(new\u00a0JTextArea())\u00a0);\r\n \u00a0\u00a0\u00a0\u00a0iframe.setVisible(\u00a0true\u00a0);\r\n \r\n \u00a0\u00a0\u00a0\u00a0desktop.add(\u00a0iframe\u00a0);\r\n \u00a0\u00a0}\r\n \r\n \u00a0\u00a0public\u00a0static\u00a0void\u00a0main(\u00a0String[]\u00a0args\u00a0)\u00a0{\r\n \u00a0\u00a0\u00a0\u00a0JFrame\u00a0f\u00a0=\u00a0new\u00a0JFrame();\r\n \u00a0\u00a0\u00a0\u00a0f.setDefaultCloseOperation(\u00a0JFrame.EXIT_ON_CLOSE\u00a0);\r\n \u00a0\u00a0\u00a0\u00a0JDesktopPane\u00a0desktop\u00a0=\u00a0new\u00a0JDesktopPane();\r\n \u00a0\u00a0\u00a0\u00a0f.add(\u00a0desktop\u00a0);\r\n \u00a0\u00a0\u00a0\u00a0f.setSize(\u00a0500,\u00a0400\u00a0);\r\n \u00a0\u00a0\u00a0\u00a0addInternalToDesktop(\u00a0desktop\u00a0);\r\n \u00a0\u00a0\u00a0\u00a0addInternalToDesktop(\u00a0desktop\u00a0);\r\n \u00a0\u00a0\u00a0\u00a0addInternalToDesktop(\u00a0desktop\u00a0);\r\n \u00a0\u00a0\u00a0\u00a0f.setVisible(\u00a0true\u00a0);\r\n \u00a0\u00a0}\r\n }<\/pre>\n<p>Hinweis:\u00a0Die Schnittstelle von JInternalFrame erinnert an JFrame, doch ist die Ereignisbehandlung anders. So besitzt JInternalFrame eine Methode addInternalFrameListener(\u2026) an Stelle von addWindowListener(\u2026). Ein JInternalFrame empf\u00e4ngt keine WindowEvents, daher darf es addWindowListener(\u2026) \u2013 wie es JFrame von java.awt.Window erbt \u2013 auch nicht besitzen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unter den JComponent-Objekten gibt es einige ausgezeichnete, die als Container f\u00fcr andere Kinder fungieren. Wurzelkomponente der Top-Level-Komponenten (JRootPane) Die Komponenten JFrame, JDialog, JWindow, JApplet und JInternalFrame enthalten als einziges Kind den leichtgewichtigen Container JRootPane. Die Methode getRootPane() liefert dieses JRootPane-Objekt. Die JRootPane verwaltet eine Layered Pane, die wiederum Content-Pane und Men\u00fc aufnimmt, und eine Glass-Pane, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[10],"tags":[],"class_list":["post-3247","post","type-post","status-publish","format-standard","hentry","category-swing"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3247"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3247\/revisions"}],"predecessor-version":[{"id":3248,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3247\/revisions\/3248"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}