package javacodebook.gui.internalframe; import javax.swing.*; import java.awt.event.*; import java.awt.*; /** * Innerhalb dieser JFrame sind zwei InternalFrames eingebettet */ public class InternalJFrame extends JFrame { /** * Im Konstruktor von JIntenalFrame wird, neben dem Titel an erster * Stelle, angegeben, dass es resizable, closeable, maximizable, * iconifiable ist. Default mäßig sind diese Einstellungen nicht gesetzt. */ private JInternalFrame innerframe1 = new JInternalFrame("Internal Frame A", true,true,true,true); private JInternalFrame innerframe2 = new JInternalFrame("Internal Frame B", true,true,true,true); /** * Die JDesktopPane ist eine Unterklasse von JLayeredPane, sie kann * InternalFrames aufnehmen. */ private JDesktopPane desktopPane = new JDesktopPane(); private Container content = null; /** * Konstruktor von InternalJFrame. */ public InternalJFrame(String title) { super(title); content = this.getContentPane(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Die Größe von einem InternalFrame muss gesetzt werden, sonst // ist es nicht sichtbar! innerframe1.setSize(220,150); innerframe2.setSize(220,150); // Es ist ratsam auch die Position der InternalFrame zu setzen, // defaultmäßig liegen diese auf Position (0,0), oben links in // der Ecke innerframe1.setLocation(10,10); innerframe2.setLocation(30,30); // Wie ein ToplevelContainer, muss auch das InternalFrame sichtbar // gemacht werden innerframe1.setVisible(true); innerframe2.setVisible(true); // Wie beim JFrame können nicht direkt auf dem Container Komponenten // gelegt werden, es muss also auch hier die ContentPane bestückt // werden. innerframe1.getContentPane().add(new JTextArea()); innerframe2.getContentPane().add(new JTextArea()); // Das InternalFrame wird dem DesktopPane zugewiesen, hierbei kann // auch die Position des InternalFrame angegeben werden. desktopPane.add(innerframe1,1); desktopPane.add(innerframe2,2); content.add(desktopPane); } }