Container
Top-Level-Container
Jede Komponente einer grafischen Oberfläche ist Teil einer GUI-Hierarchie. An
oberster Stelle dieser Hierarchie stehen die Top-Level-Container.
Jeder Top-Level-Container stellt einen Anzeigebereich für Komponenten (content
pane) und optional einen Menübereich zur Verfügung.
Dieser Screenshot zeigt ein JFrame. Der Anzeigebereich für Komponenten (content
pane) ist gelb, der Menübereich cyan.
Es gibt folgende Top-Level-Container:
-
JFrame - Fenster mit Rahmen
-
JWindow - Fenster ohne Rahmen
-
JDialog - Dialogfenster
-
JApplet - Ein Applet, das im einem Browser ausgeführt wird
Jede Swing-basierte Applikation nutzt ein Objekt der Klasse JFrame bzw.
JWindow als Top-Level-Container und hat evtl. zusätzlich noch einige
Dialogfenster (also weitere Top-Level-Container) mit eigener
Anzeigehierarchie. Jedes Applet nutzt ein Objekt der Klasse JApplet als
Top-Level-Container.
Komponenten einem Top-Level-Container hinzufügen
Wie oben bereits angesprochen, kennt jeder Top-Level-Container die Methode
getContentPane(), die ein Objekt der Klasse Container zurückliefert. Über
dieses Container-Objekt lassen sich dem Top-Level-Container mit Hilfe der add
Methode Komponenten hinzufügen. Ein kleiner Schönheitsfehler besteht nun
darin, dass die Klasse Container selbst keine Swing-Klasse ist und somit nicht
die Funktionalität der anderen "Nicht-Top-Level" Swing-Komponenten - die
allesamt von JComponent abstammen - aufweist.
Um dieses kleine Manko zu beseitigen, lässt sich in einem alternativen Ansatz
eine Swing-Komponente zur content pane machen. Am besten geeigent erscheint
hier ein Objekt der Klasse JPanel, das selbst wieder Komponenten aufnehmen
kann. Der voreingestellte Layout-Manager für ein JPanel ist das FlowLayout.
Unser FrameMitText-Beispiel sieht dann folgendermaßen aus:
import javax.swing.*;
public class FrameMitText extends JFrame {
JPanel contentPane; // Container dieses Frames JLabel beschriftung; // Label, das im Frame erscheinen soll
// Konstruktor für unseren Frame public FrameMitText() { // Erzeuge ein JPanel-Objekt contentPane = new JPanel(); // Setze das JPanel-Objekt als content pane setContentPane(contentPane); // Erzeuge das LabelObjekt mit Übergabe des Labeltextes beschriftung = new JLabel("Label-Text im Frame"); // Füge das Label dem content pane hinzu contentPane.add(beschriftung); }
public static void main(String[] args) { FrameMitText fenster = new FrameMitText(); fenster.setTitle("Frame mit Text im Label"); fenster.setSize(300,150); fenster.setVisible(true); fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
}
Menü hinzufügen
Jedem Top-Level-Container lässt sich mit Hilfe der Methode setMenuBar ein Menü
(ein Objekt der Klasse JMenuBar) hinzufügen. Dem JMenuBar-Objekt fügt man
verschiedene JMenu-Objekte hinzu. So entstehen die Menüs auf der obersten
Ebene. In die JMenu-Objekte lassen sich nun JMenuItems, also einfache
Menüeinträge, oder wieder JMenu-Objekte (Untermenüs) packen, usw. Im Quelltext
sieht das dann folgendermaßen aus:
import javax.swing.*;
public class Bilderrahmen extends JFrame { JPanel c; JMenuBar menuBar; JMenu menu;
JMenuItem menuItem1, menuItem2, menuItem3; public Bilderrahmen(){
// JPanel erzeugen JPanel c = new JPanel(); // und als content pane setzen setContentPane(c); // Erzeuge die Menüleiste menuBar = new JMenuBar(); // Erzeuge ein Menü menu = new JMenu("Bilder"); // Erzeuge die Menüeinträge und füge sie dem Menü hinzu
menuItem1 = new JMenuItem("Music"); menu.add(menuItem1); menuItem2 = new JMenuItem("Like a Virgin"); menu.add(menuItem2); menuItem3 = new JMenuItem("True Blue"); menu.add(menuItem3); // Füge das Menü der Menüleiste hinzu menuBar.add(menu); // Füge die Menüleiste dem Frame hinzu setJMenuBar(menuBar); }
public static void main(String[] args){
Bilderrahmen fenster = new Bilderrahmen(); fenster.setTitle("Bilderrahmen"); fenster.setSize(200,160); fenster.setVisible(true); fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
}
Demo 2: JMenuBar / JMenu / JMenuItem / JToolBar
Demonstriert wird der Einsatz der Container-Komponenten JMenuBar, JMenu und JToolBar sowie der Grundkomponente JMenuItem. Ein
JMenuBar (Menüleiste) enthält Objekte vom Typ JMenu (Menüs). Ein JMenu
enthält ein Liste von JMenuItem's (Menüeinträge) bzw. JMenu's
(Untermenüs). Die hierarchische Menüstruktur wird nach dem
Composite-Pattern aufgebaut. Die Methode setMenuBar sorgt schließlich dafür, dass eine Menüleiste einem JFrame hinzugefügt wird. Die JToolBar (Werkzeugleiste) enthält einfache Button-Objekte.
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class MenuBarDemo extends JFrame{
// DATENFELDER Container c; JMenuBar menuBar; JMenu menu, subMenu; JMenuItem menuItem; JToolBar toolBar; JButton button; JLabel textLabel; JPanel p1; // KONSTRUKTOR public MenuBarDemo() { c = getContentPane();
// MENÜLEISTE // neue Menüleiste erzeugen menuBar = new JMenuBar(); // Menu erzeugen menu = new JMenu("Hauptmenü"); menu.setMnemonic(KeyEvent.VK_H); menuBar.add(menu); // Hauptmenüeinträge erzeugen for(int i=0; i<3; i++) { menuItem = new JMenuItem("Menüpunkt " + (i+1)); menu.add(menuItem); } // Tastenkürzel für den Letzten Menüpunkt setzen (exemplarisch) menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_3, KeyEvent.CTRL_MASK)); // ein weiteres Menu erzeugen menu = new JMenu("Nebenmenü"); menu.setMnemonic(KeyEvent.VK_N); menuBar.add(menu); // Nebenmenueinträge erzeugen for(int i=0; i<3; i++) { menuItem = new JMenuItem("Nebenmenüpunkt " + (i+1)); menu.add(menuItem); } // Trennlinie setzen menu.addSeparator(); // Untermenü im 'Nebenmenü' subMenu = new JMenu("Untermenü"); subMenu.setMnemonic(KeyEvent.VK_U); menu.add(subMenu); // Untermenüeinträge erzeugen for(int i=0; i<3; i++) { menuItem = new JMenuItem("Untermenüpunkt " + (i+1)); subMenu.add(menuItem); } // Menüleiste hinzufügen setJMenuBar(menuBar); // TOOLBAR // Toolbar erzeugen toolBar = new JToolBar("Eine Werkzeugleiste", JToolBar.HORIZONTAL); toolBar.setFloatable(false); // Buttons für die Toolbar erzeugen for(int i=0; i<4; i++) { button = new JButton("Werkzeug " + (i+1)); button.setToolTipText("Knopf " + (i+1)); toolBar.add(button); } // Beschriftung erzeugen textLabel = new JLabel("Ein tolles Fenster mit Menüleiste und Werkzeugleiste"); p1 = new JPanel(); p1.add(textLabel); // Objekte hinzufügen c.add(toolBar, BorderLayout.NORTH); c.add(p1, BorderLayout.CENTER); } // HAUPTPROGRAMM public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true);
MenuBarDemo fenster = new MenuBarDemo(); fenster.setTitle("Frame mit Menüleiste und Toolbar"); fenster.setSize(400,250); fenster.setVisible(true); fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
}
» drucken: pdf | html
|