Programmieren II. Menü-Klassen in Java. Menüs. Menüs. Action. Dr. Klaus Höppner. GridBagLayout. Hochschule Darmstadt SS 2008

Ähnliche Dokumente
Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr.

04 - Actions. Actions

Kap. 36. SWING: Menüs. und weitere SWING-Container. Seán Dempsey

JButton, JCheckBox, JRadioButton. Programmieren II. Vorlesung 7. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2009.

Swing Lernen am Code Teil 1

...erinnern Sie sich? oopjs4b / kwhbkd4r

GUI Programmierung mit JAVA Swing

Swing. Swing. Einführung Painting bei Swing Menus and Action Swing-Komponenten. Zusammenfassung

Swing. Swing. Einführung. Menus and Action Swing-Komponenten. Zusammenfassung. JTextField. JSpinner. JTable. weitere Komponenten

Auszug aus der Klassenstruktur

Java. Prof. Dr. Stefan Enderle NTA Isny

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

11. GUI-Programmierung mit SWING Überblick

AWT. Einfache AWT-Anwendung. Swing. Vorlesung 1. Handout S. 2. import java. awt. * ;

NTB Druckdatum:

Institut für Informatik

GUI Programmierung mit javax.swing

GUI Programmierung in Java

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Java I Vorlesung 11 Graphische Oberflächen mit Swing

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

Hochschule der Medien Prof. Uwe Schulz 14. Juli 2010 Klausur Informatik, EDV-Nr Seite 1 von 5. Teil 2: Aufgaben

Programmierkurs. 11. Vorlesung. Sven Mallach. 13. Januar Institut für Informatik - Lehrstuhl Prof. Dr. M. Jünger 1/ 60

7. Architektur interaktiver Systeme

14 Swing-Komponenten , Prof. Dr. D. Ratz

GUI-Programmierung - Einführung

GUI-Programmierung - Einführung

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

Mensch-Maschine-Interaktion

7.1 Übersicht Geschichte von swing

Fachhochschule Fulda Fachbereich Angewandte Informatik. Hausarbeit Seminar: Java3D. Java Layout-Manager WS 2002/2003

Swing :Komponenten I (Teil 2)

Kurzbefehle. Mike McBride Jost Schenck Übersetzung: Jürgen Nagel

Objektorientierte Software-Entwicklung

Benutzeroberflächen. Java Teil 4

Lösungen. 1. Aufgabe. // ActionExample.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.

Objektorientierte Programmierung

Analyse und Modellierung von Informationssystemen

import java.awt.*; import java.awt.event.*; import javax.swing.*;

11. GUI-Programmierung mit SWING Überblick

Entwicklung von E-Learning Komponenten zur Computergrafik

Was passiert, wenn Button "Ok?" mit Maus angeklickt?

GUI-Programmierung in Java

JAVA Look & Feel Design Guidelines

Techniken der Projektentwicklung

Kurs OPR. Objektorientierte Programmierung

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

Handbuch für die Erweiterbarkeit

LÖSUNGEN AUFGABEN: EXCEL XP (OHNE DATEIEN)

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Programmieren 2 Selbststudium Semesterwoche 4

Einführung in Swing. Graphical User Interface

Grundlagen der Programmierung APPLETS

1 3D Modellieren. 1.1 Einführung in NX Benutzeroberfläche

Vorlesung Informatik II

Einführung in die Programmierung für NF. Übung 08

Wiederholung: Objektorientierte Oberflächen-Programmierung mit Java und Swing

Java: Vererbung. Teil 3: super()

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: "graphical user interface", GUI) in Java

Inhaltsverzeichnis Einleitung...1 Die Begleit-CD zu diesem Buch...5 Erweiterungen für Java Ereignisse...15

Vorlesung 13. Sitzung Grundlegende Programmiertechniken

Kapitel 11: Grafische Benutzeroberflächen mit Swing

Grafische Benutzungsschnittstellen (GUIs) mit Swing

Einstieg in die Informatik mit Java

Hierfür sind mit dem Content Management System (CMS) Joomla in Verbindung mit SIGE Pro Inhalte angelegt worden, die genau diesen Zweck erfüllen.

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Im Original veränderbare Word-Dateien

Sommersemester Implementierung III: GUI und Verhalten (Teil 2)

SWING. DVG2-09 -Swing 1

Programmieren mit Swing

Appletprogrammierung

J.1. J.1 GUI-Programmierung in in Java Prof. Dr. Rainer Manthey Informatik II 1

$ java awt.main A # typische Dekodierung $ java -Dtrace=all awt.main A # alle Events $ java -Dtrace=none awt.main A # keine Dekodierung

Vorlesung Programmieren. Bisher... Apple Lisa Office System 3.1. GUIs mit Java

Gestalten eigener Menüleisten in MS-Office 97/2000/XP/2003

Vorlesung Programmieren

Eclipse 3.0 (Windows)

Java Lab 2006/12/13 Client

Eclipse Tutorial.doc

Windows 7. Der Desktop und seine Elemente. Der Desktop

Interaktive Elemente, GUI-Programmierung

Grafische Benutzeroberflächen mit Swing

Grafische Benutzungsschnittstellen (GUIs) mit Swing

GUI Design. Universität Paderborn Prof. Dr. Stefan Böttcher. Java Swing und AWT

5. Java Swing Grundlagen der Programmierung II (Java) Prof. Dr. Bernhard Humm Hochschule Darmstadt University of Applied Sciences Sommersemester 2006

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Drucken soll nur das Panel, nicht der ganze Rahmen gedruckt werden.

AplusixAdmin : Administration von Aplusix 3 Benutzerhandbuch

Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt WS 2006/2007

SWT. -The Standard Widget Toolkit- Inhaltsverzeichnis. Thomas Wilhelm SWT. 1. Was ist SWT?

Arbeitsblatt 5 EAD II NetBeans

Ein Manager mit CardLayout layout/cards.java

Einstieg in die Informatik mit Java

Favoriten sichern. Sichern der eigenen Favoriten aus dem Webbrowser. zur Verfügung gestellt durch: ZID Dezentrale Systeme.

Schritt für Schritt Anleitung zum Erstellen einer Android-App zum Ein- und Ausschalten einer LED

Nachholklausur (6 ECTS) Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname... Matrikelnummer... Studienfach...

Java Desktop Anwendungen

32.4 Anpassen von Menüs und Symbolleisten 795i

Transkript:

Programmieren II Menüs Dr. Klaus Höppner Action Hochschule Darmstadt SS 2008 GridBagLayout 1 / 30 2 / 30 Menüs Menü-Klassen in Java In Fenstern von grafischen Anwendungen kennt man folgende Arten von Menüs: Menüleisten (am oberen Rand des Fensters) Symbolleisten Popup-Menüs, die mit der rechten Maustaste geöffnet werden. 3 / 30 4 / 30

Einträge in Menüs Einfaches Jedes Menü kann folgende Einträge enthalten: Normale Einträge (Klasse JMenuItem) Ankreuzfelder (Klasse JCheckBoxMenuItem) Optionsfelder (Klasse JRadioButtonMenuItem) Untermenüs (Klasse JMenu), die wiederum o. a. Einträge und Trennlinien enthalten können. Für das Hinzufügen von Einträgen aller Art existiert die Methode add(...). Separator-Linien in Untermenüs werden mit addseparator() hinzu gefügt. public class MyApp extends JFrame { public MyApp() { super("meine Anwendung"); setsize(300,300); setdefaultcloseoperation(jframe.exit_on_close); JMenuBar menubar = new JMenuBar(); JMenu menu; JMenuItem item; menu = new JMenu("Datei"); item = new JMenuItem("Öffnen"); item = new JMenuItem("Speichern"); menubar.add(menu); 5 / 30 6 / 30 Einfaches (Forts.) Die Klasse JMenu menu = new JMenu("Hilfe"); item = new JMenuItem("Über diese Anwendung"); menubar.add(box.createhorizontalglue()); menubar.add(menu); setjmenubar(menubar); setvisible(true); Die Klasse JMenu dient zum Erstellen eines Untermenüs, in dem neue Einträge vorhanden sein können. Bei den meisten Anwendungen bestehn die Menü-Einträge im MenuBar selber aus solchen Untermenüs. Dem Untermenü werden neue Elemente mit der Methode add(jmenuitem) hinzu gefügt. Es ist im Gegenzug auch möglich, Elemente aus einen Untermenü zu entfernen: public static void main(string[] args) { MyApp app = new MyApp(); remove(jmenuitem) für ein Objekt vom Typ JMenuItem, remove(int) mit Angabe der Position (beginnend bei 0), removeall() zum Entfernen aller Elemente. 7 / 30 8 / 30

menu = new JMenu("Datei"); item = new JMenuItem("Öffnen"); item = new JMenuItem("Speichern"); JMenu submenu = new JMenu("Letzte Dateien"); submenu.add("datei 1"); submenu.add("datei 2"); menu.add(submenu); menubar.add(menu); Checkboxen und Radiobuttons Da die Klassen JCheckBoxItem und JRadioButtonMenuItem von der Klasse MenuItem erben, können diese einfach zu Menüs hinzugefügt werden. Hierbei gilt, dass Radio-Buttons, einer ButtonGroup zugeordnet werden, die überwacht, dass nur einer der Buttons selektiert ist. : ButtonGroup sprachen = new ButtonGroup(); JMenu submenu = new JMenu("Sprache"); rbitem = new JRadioButtonMenuItem("Deutsch"); sprachen.add(rbitem); submenu.add(rbitem); rbitem = new JRadioButtonMenuItem("Englisch"); sprachen.add(rbitem); submenu.add(rbitem); menu.add(submenu); menu.add(new JCheckBoxMenuItem("Regelmäßig speichern")); 9 / 30 10 / 30 Accelerator Keys und Mnemonics Zusätzlich zur Maus sollen Menü-Einträge oft auch per Tastatur zugänglich sein: Ein Menüeintrag aus der Menüleiste soll mit ALT+Taste, Einträge aus einem aufgeklappten Menü per Taste gewählt werden können, wobei der entsprechende Buchstabe unterstrichen ist. Zu diesem Zweck dient die Methode setmnemonic(...). Wichtige Menüeinträge sollen direkt ohne Aufklappen des Untermenüs ausgewählt werden können. Dies sind häufig Aktionen wie Öffnen (Ctrl-O) oder Speichern (Ctrl-S). Zu diesem Zweck dient die Methode setaccelerator(keystroke). Der KeyStroke für Ctrl-S wird dabei repräsentiert durch KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK) oder kürzer KeyStroke.getKeyStroke("ctrl S") 11 / 30 menu = new JMenu("Datei"); menu.setmnemonic(keyevent.vk_d); item = new JMenuItem("Öffnen"); item.setaccelerator(keystroke.getkeystroke("ctrl O")); item = new JMenuItem("Speichern"); item.setaccelerator(keystroke.getkeystroke("ctrl S")); item = new JMenuItem("Speichern unter..."); item.setmnemonic(keyevent.vk_u); 12 / 30

Toolbars Für die Erstellung eines Toolbars wird die Klasse JToolBar verwendet. Dieser können Buttons hinzugefügt werden, die Icons oder Text enthalten. Aber wie definiert man einen Button, der ein Bild enthält? Angenommen, bezüglich des Klassen-Verzeichnisses existiert ein Unterverzeichnis images, in dem sich die Datei Open24.gif befindet. Den kompletten Pfad (genauer: URL) zu dieser Datei erhält man mit MyApp.class.getResource("/images/Open24.gif") wobei MyApp der Name der Anwendungsklasse ist. Mit dieser Datei-URL kann man dann den Konstruktor new ImageIcon(URL) aufrufen und bekommt so das Icon-Objekt für den Button. 13 / 30 JToolBar toolbar = new JToolBar(); JButton button; toolbar.setfloatable(false); button = new JButton(new ImageIcon( MyApp.class.getResource("/images/Open24.gif"))); button.setactioncommand("öffnen"); button.addactionlistener(this); toolbar.add(button); button = new JButton(new ImageIcon( MyApp.class.getResource("/images/Save24.gif"))); button.setactioncommand("speichern"); button.addactionlistener(this); toolbar.add(button); button = new JButton(new ImageIcon( MyApp.class.getResource("/images/SaveAs24.gif"))); button.setactioncommand("speichern unter..."); button.addactionlistener(this); toolbar.add(button); add(toolbar,borderlayout.page_start); 14 / 30 Popup-Menüs Ein Popup-Menu öffnet sich an der Stelle, an der die entsprechende Maustaste (i. A. rechts) betätigt wird. Hierfür existiert die Klasse JPopupMenu, die sich im Prinzip wie ein normales JMenu verhält. Allerdings ist der Anwender selbst dafür verantwortlich, dass das Popup-Menu überhaupt erscheint, wo das Popup-Menu erscheint. Man muss also einen entsprechenden MouseListener selbst definieren! Hierzu kann man die Klasse MouseAdapter verwenden. public class MyApp extends JFrame implements ActionListener { public MyApp() {... JTextField t = new JTextField(30); add(t,borderlayout.center); JPopupMenu popup = new JPopupMenu(); item = new JMenuItem("Löschen"); popup.add(item); item = new JMenuItem("Aussschneiden"); popup.add(item); t.addmouselistener(new PopupListener(popup));... 15 / 30 16 / 30

(Forts.) Die Klasse Action class PopupListener extends MouseAdapter { JPopupMenu popup; public PopupListener(JPopupMenu popup) { this.popup = popup; @Override public void mousereleased(mouseevent e) { if (e.ispopuptrigger()) { popup.show(e.getcomponent(), e.getx(), e.gety()); Häufig soll ein und dieselbe Aktion auf verschiedene Arten und Weisen ausgelöst werden, z. B das Öffnen einer Datei durch Auswahl aus dem Datei-Menü Klick auf das Ordner-Symbol im Toolbar Eingabe von Ctrl-O Zur Vereinfachung gibt es die Klasse AbstractAction, die das Interface ActionListener implementiert. Dieses kann an verschiedenen Stellen (Buttons, Menüeinträgen) verwendet werden und stellt dort überall dieselbe Funktionalität zur Verfügung. Eigenschaften von AbstractAction 17 / 30 18 / 30 In der KlasseAbstractAction können verschiedene Eigenschaften mit der Methode putvalue(string,object) gesetzt werden: NAME Name (benutzt für Menüeinträge, Buttons, Checkboxen,... ) SMALL_ICON Icon (für Menüeinträge, Buttons, Checkboxen,... ) LONG_ICON_KEY Icon (für Buttons, Checkboxen,... ) ACCELERATOR_KEY Shortcut für Menüeinträge MNEMONIC_KEY Mnemonic (für Buttons, Checkboxen,... ) SHORT_DESCRIPTION Tooltip-Text ACTION_COMMAND_KEY String für ActionCommand public class MyApp extends JFrame { public MyApp() {... OpenAction openaction = new OpenAction(); menu = new JMenu("Datei"); menu.setmnemonic(keyevent.vk_d); item = new JMenuItem(openAction); menubar.add(menu); setjmenubar(menubar); 19 / 30 20 / 30

(Forts.) (Forts.) JToolBar toolbar = new JToolBar(); JButton button; toolbar.setfloatable(false); button = new JButton(openAction); button.settext(null); button.setactioncommand("öffnen"); toolbar.add(button); add(toolbar,borderlayout.page_start);... class OpenAction extends AbstractAction { public OpenAction() { putvalue(action.name,"öffnen"); putvalue(action.mnemonic_key,keyevent.vk_f); putvalue(action.accelerator_key,keystroke.getkeystroke( KeyEvent.VK_O,KeyEvent.CTRL_MASK)); putvalue(action.action_command_key,"öffnen"); putvalue(action.large_icon_key,new ImageIcon( MyApp.class.getResource("/images/Open16.gif"))); putvalue(action.short_description,"datei öffnen"); @Override public void actionperformed(actionevent e) { System.out.println(e.getActionCommand()); 21 / 30 22 / 30 GridBagLayout Einführung eines GridBagLayouts In vielen Anwendungen soll die Anordnung der Komponenten gitterartig erfolgen. Beim bisher benutzen GridLayout sind allerdings alle Zellen des Grids gleich groß, was zu einem unausgewogenen Layout führt. Hier ist das GridBagLayout überlegen. Das GridBagLayout hat folgende Eigenschaften: Komponenten können mehrere Zeilen oder Spalten einnehmen. Es kann definiert werden, in welche Richtungen eine Komponente wachsen kann. Die Ausrichtung von Komponenten innerhalb der Zelle kann definiert werden. Zellen kann ein Gewicht gegeben werden, das definiert, ob (und wie stark) die Zelle wachsen kann. 23 / 30 24 / 30

Die Klasse GridBagConstraints Die zuvor beschriebenen Eigenschaften werden in einem GridBagConstraints-Objekt beschrieben. Dieses enthält die Attribute gridx, gridy Position der Komponente (Default: 0). Neben positiven Zahlen ist auch GridBagConstraints.RELATIVE zulässig. gridwidth, gridheight gibt die Zahl der Spalten bzw. Zeilen an, die die Komponente einnimmt (Default: 1). GridBagConstraints.REMAINDER zeigt an, dass diese Komponente die letzte in der Zeile bzw. Spalte ist und alle übrigen Zellen einnimmt. fill gibt an, ob die Komponente gedehnt wird. Zulässige Werte: GridBagConstraints.NONE (default),.both,.horizontal,.vertical Die Klasse GridBagConstraints (Forts.) ipadx, ipady Padding in Pixeln innerhalb der Komponente anchor Anordnung der Komponente innerhalb der Zelle (wie in BorderLayout) weightx, weighty gibt an, wie stark die Zelle wachsen darf. Erlaubte Werte liegen zwischen 0 (gar nicht, default) und 1 (maximales Wachstum). Haben mehrere Komponenten innerhalb einer Zeile bzw. Spalte Gewichte > 0, so wird freier Platz auf die Komponenten anhand des Gewichtsverhältnisses verteilt. 25 / 30 26 / 30 public class GridBagLayoutDemo extends JFrame { public GridBagLayoutDemo() { super("gidbaglyaoutdemo"); setlayout(new GridBagLayout()); setdefaultcloseoperation(jframe.exit_on_close); JButton button; GridBagConstraints c; button = new JButton("Button 1"); c.gridx = 0; c.gridy = 0; c.weightx = 1; button = new JButton("Button 2"); c.gridx = GridBagConstraints.RELATIVE; c.gridy = 0; c.weightx = 0.5; button = new JButton("Button 3"); c.gridx = GridBagConstraints.RELATIVE; c.gridy = 0; 27 / 30 28 / 30

button = new JButton("Long-Named Button 4"); c.ipady = 40; //make this component tall c.weightx = 0.0; c.gridwidth = 3; c.gridx = 0; c.gridy = GridBagConstraints.RELATIVE; button = new JButton("5"); c.ipady = 0; c.weighty = 1.0; c.anchor = GridBagConstraints.PAGE_END; c.gridx = 1; //aligned with button 2 c.gridwidth = 2; //2 columns wide c.gridy = GridBagConstraints.RELATIVE; //third row pack(); setvisible(true); public static void main(string[] args) { GridBagLayoutDemo app = new GridBagLayoutDemo(); 29 / 30 30 / 30