Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.
 
Inhaltsverzeichnis
Vorwort
1 Neues in Java 8 und Java 7
2 Fortgeschrittene String-Verarbeitung
3 Threads und nebenläufige Programmierung
4 Datenstrukturen und Algorithmen
5 Raum und Zeit
6 Dateien, Verzeichnisse und Dateizugriffe
7 Datenströme
8 Die eXtensible Markup Language (XML)
9 Dateiformate
10 Grafische Oberflächen mit Swing
11 Grafikprogrammierung
12 JavaFX
13 Netzwerkprogrammierung
14 Verteilte Programmierung mit RMI
15 RESTful und SOAP-Web-Services
16 Technologien für die Infrastruktur
17 Typen, Reflection und Annotationen
18 Dynamische Übersetzung und Skriptsprachen
19 Logging und Monitoring
20 Sicherheitskonzepte
21 Datenbankmanagement mit JDBC
22 Java Native Interface (JNI)
23 Dienstprogramme für die Java-Umgebung
Stichwortverzeichnis

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java SE 8 Standard-Bibliothek von Christian Ullenboom
Das Handbuch für Java-Entwickler
Buch: Java SE 8 Standard-Bibliothek

Java SE 8 Standard-Bibliothek
Pfeil 10 Grafische Oberflächen mit Swing
Pfeil 10.1 AWT, JavaFoundation Classes und Swing
Pfeil 10.1.1 Das Abstract Window Toolkit (AWT)
Pfeil 10.1.2 Java Foundation Classes (JFC)
Pfeil 10.1.3 Was Swing von AWT-Komponenten unterscheidet
Pfeil 10.2 Mit NetBeans zur ersten Swing-Oberfläche
Pfeil 10.2.1 Projekt anlegen
Pfeil 10.2.2 Eine GUI-Klasse hinzufügen
Pfeil 10.2.3 Programm starten
Pfeil 10.2.4 Grafische Oberfläche aufbauen
Pfeil 10.2.5 Swing-Komponenten-Klassen
Pfeil 10.2.6 Funktionalität geben
Pfeil 10.3 Aller Swing-Anfang – Fenster zur Welt
Pfeil 10.3.1 Eine Uhr, bei der die Zeit nie vergeht
Pfeil 10.3.2 Swing-Fenster mit javax.swing.JFrame darstellen
Pfeil 10.3.3 Mit add(…) auf den Container
Pfeil 10.3.4 Fenster schließbar machen – setDefaultCloseOperation(int)
Pfeil 10.3.5 Sichtbarkeit des Fensters
Pfeil 10.3.6 Größe und Position des Fensters verändern
Pfeil 10.3.7 Fenster- und Dialogdekoration, Transparenz *
Pfeil 10.3.8 Die Klasse Toolkit *
Pfeil 10.3.9 Zum Vergleich: AWT-Fenster darstellen *
Pfeil 10.4 Beschriftungen (JLabel)
Pfeil 10.4.1 Mehrzeiliger Text, HTML in der Darstellung
Pfeil 10.5 Icon und ImageIcon für Bilder auf Swing-Komponenten
Pfeil 10.5.1 Die Klasse ImageIcon
Pfeil 10.6 Es tut sich was – Ereignisse beim AWT
Pfeil 10.6.1 Die Ereignisquellen und Horcher (Listener) von Swing
Pfeil 10.6.2 Listener implementieren
Pfeil 10.6.3 Listener bei dem Ereignisauslöser anmelden/abmelden
Pfeil 10.6.4 Adapterklassen nutzen
Pfeil 10.6.5 Innere Mitgliedsklassen und innere anonyme Klassen
Pfeil 10.6.6 Aufrufen der Listener im AWT-Event-Thread
Pfeil 10.6.7 Ereignisse, etwas genauer betrachtet *
Pfeil 10.7 Schaltflächen
Pfeil 10.7.1 Normale Schaltflächen (JButton)
Pfeil 10.7.2 Der aufmerksame ActionListener
Pfeil 10.7.3 Schaltflächen-Ereignisse vom Typ ActionEvent
Pfeil 10.7.4 Basisklasse AbstractButton
Pfeil 10.7.5 Wechselknopf (JToggleButton)
Pfeil 10.8 Textkomponenten
Pfeil 10.8.1 Text in einer Eingabezeile
Pfeil 10.8.2 Die Oberklasse der Textkomponenten (JTextComponent)
Pfeil 10.8.3 Geschützte Eingaben (JPasswordField)
Pfeil 10.8.4 Validierende Eingabefelder (JFormattedTextField)
Pfeil 10.8.5 Einfache mehrzeilige Textfelder (JTextArea)
Pfeil 10.8.6 Editor-Klasse (JEditorPane) *
Pfeil 10.9 Swing Action *
Pfeil 10.10 JComponent und Component als Basis aller Komponenten
Pfeil 10.10.1 Hinzufügen von Komponenten
Pfeil 10.10.2 Tooltips (Kurzhinweise)
Pfeil 10.10.3 Rahmen (Border) *
Pfeil 10.10.4 Fokus und Navigation *
Pfeil 10.10.5 Ereignisse jeder Komponente *
Pfeil 10.10.6 Die Größe und Position einer Komponente *
Pfeil 10.10.7 Komponenten-Ereignisse *
Pfeil 10.10.8 UI-Delegate – der wahre Zeichner *
Pfeil 10.10.9 Undurchsichtige (opake) Komponente *
Pfeil 10.10.10 Properties und Listener für Änderungen *
Pfeil 10.11 Container
Pfeil 10.11.1 Standardcontainer (JPanel)
Pfeil 10.11.2 Bereich mit automatischen Rollbalken (JScrollPane)
Pfeil 10.11.3 Reiter (JTabbedPane)
Pfeil 10.11.4 Teilungskomponente (JSplitPane)
Pfeil 10.12 Alles Auslegungssache – die Layoutmanager
Pfeil 10.12.1 Übersicht über Layoutmanager
Pfeil 10.12.2 Zuweisen eines Layoutmanagers
Pfeil 10.12.3 Im Fluss mit FlowLayout
Pfeil 10.12.4 BoxLayout
Pfeil 10.12.5 Mit BorderLayout in alle Himmelsrichtungen
Pfeil 10.12.6 Rasteranordnung mit GridLayout
Pfeil 10.12.7 Der GridBagLayoutmanager *
Pfeil 10.12.8 Null-Layout *
Pfeil 10.12.9 Weitere Layoutmanager
Pfeil 10.13 Rollbalken und Schieberegler
Pfeil 10.13.1 Schieberegler (JSlider)
Pfeil 10.13.2 Rollbalken (JScrollBar) *
Pfeil 10.14 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen
Pfeil 10.14.1 Kontrollfelder (JCheckBox)
Pfeil 10.14.2 ItemSelectable, ItemListener und das ItemEvent
Pfeil 10.14.3 Sich gegenseitig ausschließende Optionen (JRadioButton)
Pfeil 10.15 Fortschritte bei Operationen überwachen *
Pfeil 10.15.1 Fortschrittsbalken (JProgressBar)
Pfeil 10.15.2 Dialog mit Fortschrittsanzeige (ProgressMonitor)
Pfeil 10.16 Menüs und Symbolleisten
Pfeil 10.16.1 Die Menüleisten und die Einträge
Pfeil 10.16.2 Menüeinträge definieren
Pfeil 10.16.3 Einträge durch Action-Objekte beschreiben
Pfeil 10.16.4 Mit der Tastatur – Mnemonics und Shortcut
Pfeil 10.16.5 Der Tastatur-Shortcut (Accelerator)
Pfeil 10.16.6 Tastenkürzel (Mnemonics)
Pfeil 10.16.7 Symbolleisten alias Toolbars
Pfeil 10.16.8 Popup-Menüs
Pfeil 10.16.9 System-Tray nutzen *
Pfeil 10.17 Das Model-View-Controller-Konzept
Pfeil 10.18 Auswahlmenüs, Listen und Spinner
Pfeil 10.18.1 Listen (JList)
Pfeil 10.18.2 Auswahlmenü (JComboBox)
Pfeil 10.18.3 Drehfeld (JSpinner) *
Pfeil 10.18.4 Datumsauswahl
Pfeil 10.19 Tabellen (JTable)
Pfeil 10.19.1 Ein eigenes Tabellen-Model
Pfeil 10.19.2 Basisklasse für eigene Modelle (AbstractTableModel)
Pfeil 10.19.3 Ein vorgefertigtes Standardmodell (DefaultTableModel)
Pfeil 10.19.4 Ein eigener Renderer für Tabellen
Pfeil 10.19.5 Zell-Editoren
Pfeil 10.19.6 Automatisches Sortieren und Filtern mit RowSorter *
Pfeil 10.20 Bäume (JTree)
Pfeil 10.20.1 JTree und sein TreeModel und TreeNode
Pfeil 10.20.2 Selektionen bemerken
Pfeil 10.20.3 Das TreeModel von JTree *
Pfeil 10.21 JRootPane und JDesktopPane *
Pfeil 10.21.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane)
Pfeil 10.21.2 JDesktopPane und die Kinder von JInternalFrame
Pfeil 10.21.3 JLayeredPane
Pfeil 10.22 Dialoge und Window-Objekte
Pfeil 10.22.1 JWindow und JDialog
Pfeil 10.22.2 Modal oder nichtmodal?
Pfeil 10.22.3 Standarddialoge mit JOptionPane
Pfeil 10.22.4 Der Dateiauswahldialog
Pfeil 10.22.5 Der Farbauswahldialog JColorChooser *
Pfeil 10.23 Flexibles Java-Look-and-Feel
Pfeil 10.23.1 Look-and-Feel global setzen
Pfeil 10.23.2 UIManager
Pfeil 10.23.3 Die Windows-Optik mit JGoodies Looks verbessern *
Pfeil 10.24 Swing-Komponenten neu erstellen oder verändern *
Pfeil 10.24.1 Überlagerungen mit dem Swing-Komponenten-Dekorator JLayer
Pfeil 10.25 Die Zwischenablage (Clipboard)
Pfeil 10.25.1 Clipboard-Objekte
Pfeil 10.25.2 Mit Transferable auf den Inhalt zugreifen
Pfeil 10.25.3 DataFlavor ist das Format der Daten in der Zwischenablage
Pfeil 10.25.4 Einfügungen in der Zwischenablage erkennen
Pfeil 10.25.5 Drag & Drop
Pfeil 10.26 Undo durchführen *
Pfeil 10.27 AWT, Swing und die Threads
Pfeil 10.27.1 Ereignisschlange (EventQueue) und AWT-Event-Thread
Pfeil 10.27.2 Swing ist nicht threadsicher
Pfeil 10.27.3 invokeLater(…) und invokeAndWait(…)
Pfeil 10.27.4 SwingWorker
Pfeil 10.27.5 Eigene Ereignisse in die Queue setzen *
Pfeil 10.27.6 Auf alle Ereignisse hören *
Pfeil 10.28 Barrierefreiheit mit der Java Accessibility API
Pfeil 10.29 Zeitliches Ausführen mit dem javax.swing.Timer
Pfeil 10.30 Die Zusatzkomponentenbibliothek SwingX
Pfeil 10.30.1 Im Angebot: Erweiterte und neue Swing-Komponenten
Pfeil 10.30.2 Überblick über erweiterte Standard-Swing-Klassen
Pfeil 10.30.3 Neue Swing-Klassen
Pfeil 10.30.4 Weitere SwingX-Klassen
Pfeil 10.30.5 SwingX-Installation
Pfeil 10.31 Zum Weiterlesen
 
Zum Seitenanfang

10.22Dialoge und Window-Objekte Zur vorigen ÜberschriftZur nächsten Überschrift

Seit den ersten Swing-Tagen besitzt Swing Standarddialoge, wie einen Dateiauswahl-, Druck- oder Farbauswahldialog. Auf diese Dialogboxen soll dieser Abschnitt eingehen. Allerdings muss fairerweise gesagt werden, dass die Swing-Standarddialoge nur absolutes Minimim sind. Es lohnt sich, auf quelloffene Komponenten zurückzugreifen. Dazu zählen:

 
Zum Seitenanfang

10.22.1JWindow und JDialog Zur vorigen ÜberschriftZur nächsten Überschrift

Ein JFrame ist ein Fenster, das standardmäßig eine Dekoration besitzt. Ein java.awt.Window hat diese Dekoration nicht, sodass sich diese Fläche als Willkommensbildschirm oder als komplette Zeichenfläche nutzen lässt. javax.swing.JWindow ist die Swing-Unterklasse von Window.

Die folgende Tabelle gibt die Unterschiede zwischen Fenster, Window und Dialog an:

Eigenschaft

Frame

Window

Dialog

modal

nein

nein

möglich

größenveränderbar

ja

nein

ja

Titel

ja

nein

ja

Rahmen

ja

nein

ja

Menü

ja

nein

unüblich; bei JDialog aber möglich

Symbol-Icon

ja

ja

ja

Tabelle 10.11Unterschiede zwischen Frame, Window und Dialog

 
Zum Seitenanfang

10.22.2Modal oder nichtmodal? Zur vorigen ÜberschriftZur nächsten Überschrift

Bildet eine Java-Applikation zwei Fenster, so kann der Anwender zwischen beiden Fenstern hin- und herschalten. Es ist nicht möglich, ein Fenster aufzubauen und dort Eingaben zu erzwingen, während das andere Fenster gesperrt ist. Dafür gibt es in Java spezielle Fenster, die Dialoge, die Swing mit javax.swing.JDialog angeht. JDialog ist eine Unterklasse von der AWT-Klasse Dialog, und Dialog ist wiederum eine Spezialisierung von Window. Ist ein Dialog im Zustand modal, muss erst der Dialog beendet werden, damit es in einem anderen Fenster weitergehen kann – alle Benutzereingaben an andere Fenster der Java-Anwendung sind so lange gesperrt. Sind mehrere Fenster gleichzeitig offen und können sie Eingaben annehmen, so nennt sich dieser Zustand nichtmodal.

Soll der Dialog modal sein, sind ein übergeordnetes Fenster und ein Wahrheitswert true für den Modalitätstyp einzusetzen:

JDialog d = new JDialog( owner, true );
...
d.setVisible( true );
// Hier geht’s erst nach dem Schließen des Dialogs weiter.

Der owner kann ein anderer Dialog, ein Frame oder ein Window sein. Da bei modalen Dialogen alle Eingaben zu anderen Fenstern blockiert sind, nehmen erst nach dem Schließen des Dialogs andere Fenster die Eingaben wieder an. Ob der Dialog modal ist oder nicht, lässt sich auch nach dem Erzeugen mit setModal(boolean) setzen.

 
Zum Seitenanfang

10.22.3Standarddialoge mit JOptionPane Zur vorigen ÜberschriftZur nächsten Überschrift

Die Klasse JOptionPane erlaubt einfache Meldedialoge, Eingabedialoge, Bestätigungsdialoge und Optionsdialoge mit nur einem einfachen statischen Methodenaufruf der Art showXXXDialog(…):

  • showMessageDialog(…): nur Nachricht anzeigen

  • showInputDialog(…): Rückgabe ist ein String mit der Benutzereingabe bzw. Auswahl

  • showConfirmDialog(…): Frage beantworten mit Möglichkeiten wie ja/nein

  • showOptionDialog(…): allgemeinste Funktion

Einige Beispiele:

Listing 10.79com/tutego/insel/ui/dialog/JOptionPaneDialogDemo.java, main()

// Dialog für Nachricht
JOptionPane.showMessageDialog( null, "Wir Kinder aus dem Möwenweg" );

// Dialog für einfache Eingabe
JOptionPane.showInputDialog( "Bitte Zahl eingeben" );

// Dialog mit Auswahl Ja/Nein/Abbrechen
JOptionPane.showConfirmDialog( null, "Alles OK?" );

// Dialog mit unterschiedlichen Auswahlmöglichkeiten
String[] genderOptions = {
"männlich", "weiblich", "keine Ahnung", "ändert sich ständig" };

String gender = (String) JOptionPane.showInputDialog( null,
"Geschlecht",
"Bitte das Geschlecht wählen (eigenes, nicht gewünschtes)",
JOptionPane.QUESTION_MESSAGE,
null, genderOptions,
genderOptions[1] );

System.out.println( gender );

// Angepasster Optionsdialog
String[] yesNoOptions = { "Ja", "Nein", "Abbrechen" };

int n = JOptionPane.showOptionDialog( null,
"Ja oder Nein?", // question
"Ja/Nein/Abbrechen", // title
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, // icon
null, yesNoOptions,yesNoOptions[0] );

if ( n == JOptionPane.YES_OPTION )
System.out.println("Ja gewählt");

Einige Methoden erwarten als erstes Argument eine Vater-Komponente, die null sein kann. Sie dient der relativen Ausrichtung des Dialogs und verknüpft den Dialog derart mit einem Fenster, dass, wenn das Fenster versteckt wird, auch der Dialog verschwindet.

Bestätigung einholen

Die statische Methode showConfirmDialog(…) gibt es in vier Varianten, denn sie erlaubt die Angabe für ein Icon, eine Überschrift, Fragetext und die Auswahl unterschiedlicher Schaltflächen:

class javax.swing.JOptionPane
extends JComponent
implements Accessible
  • static int showConfirmDialog(Component parentComponent, Object message)
    Dialog mit eigener Nachricht und mit Ja/Nein/Abbrechen-Schaltflächen sowie vordefiniertem Titel.

  • static int showConfirmDialog(Component parentComponent, Object message, String title,
    int optionType)
    Dialog mit eigener Nachricht sowie Dialogtitel, und der letzte Parameter kann JOptionPane.YES_NO_OPTION oder JOptionPane.YES_NO_CANCEL_OPTION sein, um entweder Ja/Nein-Schaltflächen darzustellen, oder auch Ja/Nein/Abbrechen-Schaltflächen.

Rückgaben der Methode zeigen Auswahl

Bei den statischen Methoden

  • String showInputDialog(…) (eine Methode liefert auch Object als Rückgabe),

  • int showConfirmDialog(…),

  • int showOptionDialog(…)

zeigt eine Rückgabe an, was der Benutzer gewählt bzw. geschrieben hat (showMessageDialog(…) liefert keine Rückgabe, sondern void). Mögliche Rückgaben sind bei showConfirmDialog(…) und showOptionDialog(…) Ganzzahlen, die die Konstanten YES_OPTION, NO_OPTION, CANCEL_OPTION, OK_OPTION oder CLOSED_OPTION benennen. showInputDialog(…) liefert einen String oder null, wenn der Benutzer den Dialog abgebrochen hat. Die Methode showInputDialog(…) ist flexibel und zeigt nicht einfach nur ein Eingabefeld an, sondern bei entsprechender Parametrisierung auch eine Auswahlliste.

Dialogtyp und Visualisierung mit Icon

Alle vier statischen Dialogmethoden showMessageDialog(…), showConfirmDialog(…), showOption-Dialog(…) und showInputDialog(…) erlauben zusätzlich die Angabe eines Nachrichtentyps; mögliche Konstanten sind ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE und PLAIN_MESSAGE. Sie bestimmen im Allgemeinen ein Standard-Icon, das vom Look-and-Feel abhängig ist. Ein eigenes Icon kann ebenfalls zugewiesen werden.

  • static int showConfirmDialog(Component parentComponent, Object message, String title,
    int optionType, int messageType)

  • static int showConfirmDialog(Component parentComponent, Object message, String title,
    int optionType, int messageType, Icon icon)

  • static String showInputDialog(Component parentComponent, Object message, String title,
    int messageType)

  • static Object showInputDialog(Component parentComponent, Object message, String title,
    int messageType, Icon icon, Object[] selectionValues, Object initialSelectionValue)

  • static void showMessageDialog(Component parentComponent, Object message, String title,
    int messageType)

  • static void showMessageDialog(Component parentComponent, Object message, String title,
    int messageType, Icon icon)

  • showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue)

Exemplare vom JOptionPane erzeugen

Selten gibt es die Notwendigkeit, andere als die statischen Methoden von showXXXDialog(…) einzusetzen. Erforderlich kann ein in einem solchen Fall genutztes Exemplar der Klasse JOptionPane aber zum Beispiel dann sein, wenn beim Klick auf das × vom Dialogfenster der Dialog nicht verschwinden soll oder wenn gewisse Werte im Textfeld bei showInputDialog(…) nicht erwünscht sind, etwa Weißraum. Grundsätzlich sieht der Aufbau eines eigenen Dialogs dann so aus:

JOptionPane pane = new JOptionPane( ... );
JDialog dialog = new JDialog();
dialog.setContentPane( pane );

Oder:

JOptionPane pane = new JOptionPane( ... );
JDialog dialog = pane.createDialog( parent, title );
 
Zum Seitenanfang

10.22.4Der Dateiauswahldialog Zur vorigen ÜberschriftZur nächsten Überschrift

Die Klasse JFileChooser (unter AWT heißt die Klasse FileDialog) simuliert einen betriebssystemabhängigen Dialog zur Auswahl von Dateien und Verzeichnissen. Der Selektor ist modal und kann für das Speichern und Öffnen konfiguriert sein. Zudem lassen sich die Pfade und ein Filter zur Auswahl spezieller Dateien setzen. Nach dem Schließen und Beenden mit dem OK-Button stehen ausgewählte Dateien zur Verfügung.

Vollständiges Programm für eine Auswahlbox

Wir können direkt aus dem Hauptprogramm ein Objekt JFrame erzeugen und dann einen Dateiauswahldialog öffnen. Zusätzlich wollen wir ihm einen Filter mitgeben, der Textdateien mit den Endungen .txt, .html und .log zulässt. Die Realisierung des Filterns erfolgt durch eine vorgegebene Implementierung der Schnittstelle FileFilter, durch FileNameExtensionFilter:

Listing 10.80com/tutego/insel/ui/dialog/JFileChooserDemo.java, main()

JFileChooser fc = new JFileChooser();
FileFilter filter = new FileNameExtensionFilter( "Textdateien",
"xml", "txt", "html", "log" );
fc.setFileFilter( filter );

switch ( fc.showOpenDialog( null ) ) {
case JFileChooser.APPROVE_OPTION:
File file = fc.getSelectedFile();
System.out.println( file.getName() );
break;
default:
System.out.println( "Auswahl abgebrochen" );
}
System.exit( 0 );
Screenshot der Anwendung JFileChooseDemo

Abbildung 10.67Screenshot der Anwendung JFileChooseDemo

[+]Tipp

Im Speichern-Dialog sollte ein Standardname angegeben sein. Im Idealfall richtet er sich nach dem Inhalt der Datei. Dazu bietet die Klasse JFileChooser die Methode setSelectedFile():

c.setSelectedFile( new File("c:/test.txt") );

Zum Erzeugen eines Auswahldialogs steht eine Reihe von Konstruktoren zur Auswahl:

class javax.swing.JFileChooser
extends JComponent
implements Accessible
  • JFileChooser()
    Erzeugt einen Dateidialog ohne Titel zum Öffnen einer Datei. Zeigt auf das Benutzerverzeichnis.

  • JFileChooser(File currentDirectory)
    Erzeugt wie JFileChooser() einen Dateidialog ohne Titel zum Öffnen einer Datei, zeigt aber beim Start auf das Verzeichnis currentDirectory.

  • JFileChooser(String currentDirectoryPath)
    Äquivalent zu JFileChooser(new File(currentDirectoryPath)).

  • String getDirectory()
    Liefert das Dialogverzeichnis.

  • File getSelectedFile()
    Liefert die ausgewählte Datei.

  • File[] getSelectedFiles()
    Liefert alle ausgewählten Dateien, wenn der Dateiauswahldialog Mehrfachselektion zulässt.

  • void setDialogTitle(String dialogTitle)
    Setzt einen neuen Fenstertitel.

  • void setDialogType(int dialogType)
    Handelt es sich um einen Laden/Speichern-Dialog oder um einen angepassten Dialog? Deklarierte Konstanten sind JFileChooser.OPEN_DIALOG, JFileChooser.SAVE_DIALOG und JFileChooser.CUSTOM_DIALOG.

  • void setFileView(FileView fileView)
    Standardmäßig zeigt der Dialog neben dem Dateinamen ein kleines Bild an. Das lässt sich mit einem FileView-Objekt anpassen.

  • void setAccessory(JComponent newAccessory)
    Setzt eine Komponente für eine mögliche Vorschau.

Filtern der Liste *

Ein Dateiauswahldialog zeigt standardmäßig alle nicht geschützten Dateien und Verzeichnisse an. Dem Dialog lässt sich ein Filter zuweisen, sodass nicht gewünschte Dateien ausgefiltert werden. Standardmäßig beachtet der Dateiauswahldialog drei unterschiedliche Filter:

  • Ob der JFileChooser geschützte Dateien anzeigt oder nicht, setzt setFileHidingEnabled(boolean). So zeigt setFileHidingEnabled(false) alle Dateien, auch die geschützten, an – geschützte Dateien beginnen auf Unix-Systemen mit einem Punkt.

  • Ein eigener Dateifilter lässt sich mit setFileFilter(FileFilter) setzen. Was der Filter nicht akzeptiert, taucht auch später in der Liste nicht auf.

  • Filterlisten bestehen aus mehreren Filtern, die der Benutzer später auswählen kann. Microsoft Word zeigt zum Beispiel beim Laden Filterlisten wie Alle Dateien (*.*), Word Dokumente (*.doc; *.doc*) usw. an. Ein Filter wird mit addChoosableFileFilter(FileFilter) einem JFileChooser hinzugefügt. Es kann beliebig viele Aufrufe dieser Methode geben, die je einen Filter der Liste hinzufügt.

Einen konkreten Filter implementiert die Schnittstelle javax.swing.filechooser.FileFilter. Achtung! Obwohl wir eine Schnittstelle FileFilter schon kennen, handelt es sich nicht um diejenige aus dem java.io-Paket, sondern um eine Schnittstelle aus dem Paket javax.swing. filechooser.

Die Klassen, die die Schnittstelle FileFilter implementieren, müssen eine accept(File)-Methode realisieren und eine Methode getDescription(), die eine Zeichenkette für die Dialogliste liefert. Für reine Dateiendungen bietet sich die vorgefertigte Klasse javax.swing.filechooser. FileNameExtensionFilter an.

abstract class javax.swing.filechooser.FileFilter
  • abstract boolean accept(File f)
    Akzeptiert der FileFilter die Datei oder nicht?

  • abstract String getDescription()
    Liefert eine Beschreibung für den Filter.

[zB]Beispiel

Nur alle Ordner sowie Dateien, die mit der Tilde (»~«) beginnen, sollen angezeigt werden:

fc.setFileFilter( new FileFilter() {
@Override public boolean accept( File f ) {
return f.isDirectory() ||
f.getName().startsWith( "~" );
}
@Override public String getDescription() {
return "Benutzerverzeichnisse";
}
} );
class javax.swing.JFileChooser
extends JComponent
implements Accessible
  • void setFileHidingEnabled(boolean b)
    Bestimmt, ob verborgene Dateien angezeigt werden sollen.

  • void setFileFilter(javax.swing.filechooser.FileFilter filter)
    Setzt einen FileFilter zur Anzeige der gewünschten Dateien.

  • void addChoosableFileFilter(javax.swing.filechooser.FileFilter filter)
    Fügt einen Filter hinzu.

[»]Hinweis

Sollen im Dialog nur Verzeichnisse, aber keine Dateien auftauchen, so lässt sich dies mit setFileSelectionMode(int) und einem passenden Argument einstellen:

fileChooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY );

Insgesamt sind drei Konstanten deklariert: FILES_ONLY, DIRECTORIES_ONLY und FILES_AND_DIRECTORIES. Der Name verrät schon die Bedeutung.

Vorschaubilder *

Die Methode setAccessory(JComponent) kann eine Komponente für die Vorschau zuweisen, die immer dann aktualisiert wird, wenn der Benutzer im Dialog eine Datei auswählt. Eine Auswahl meldet dabei ein PropertyChangeEvent, das ein Listener abfängt und testet, ob es JFileChooser.SELECTED_FILE_CHANGED_PROPERTY war. Um das Vorgehen kurz zu skizzieren, folgende Ereignisbehandlung:

@Override public void propertyChange( PropertyChangeEvent e ) {
if ( JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(e.getPropertyName()) ) {
File f = (File) e.getNewValue();
// File f laden, etwa mit ImageIcon, dann anzeigen.
}
}
 
Zum Seitenanfang

10.22.5Der Farbauswahldialog JColorChooser * Zur vorigen ÜberschriftZur nächsten Überschrift

Mit einem JColorChooser lassen sich Farben über drei unterschiedliche Reiter auswählen. Der Benutzer hat die Auswahl zwischen vordefinierten Farben, HSB-Werten und RGB-Werten. Um den Farbauswahldialog auf den Bildschirm zu bekommen, genügt ein Aufruf von JColorChooser.showDialog(Component, String, Color) mit drei Argumenten: einem Component-Objekt (dem Vater des Dialogs), dem Titel und einer Anfangsfarbe. Beendet der Benutzer den Dialog, wird als Rückgabewert die ausgewählte Farbe geliefert. Wird der Dialog abgebrochen, so ist der Rückgabewert null:

Listing 10.81com/tutego/insel/ui/dialog/JColorChooserDemo.java, main()

JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
JButton b = new JButton( "Farbe ändern" );
f.add( b );
b.addActionListener( new ActionListener() {
@Override public void actionPerformed( ActionEvent e ) {
Component comp = (Component) e.getSource();
Color newColor = JColorChooser.showDialog( null,
"Wähle neue Farbe",
comp.getBackground() );
comp.setBackground( newColor );
}
} );
f.pack();
f.setVisible( true );

Den Aufruf mit showDialog(…) einzuleiten, ist nicht der einzige Weg. Wir können auch den Konstruktor nutzen und dieses Exemplar später mit JColorChooser.createDialog(…) übergeben und anzeigen.

Screenshot des Farbauswahldialogs des Demoprogramms JColorChooserDemo

Abbildung 10.68Screenshot des Farbauswahldialogs des Demoprogramms JColorChooserDemo

class javax.swing.JColorChooser
extends JComponent implements Accessible
  • JColorChooser()
    Erzeugt einen neuen Farbauswahldialog.

  • JColorChooser(Color c)
    Erzeugt einen neuen Farbauswahldialog mit einer vordefinierten Farbe.

  • static Color showDialog(Component c, String title, Color initialColor)
    Zeigt einen modalen Farbauswahldialog.

  • static JDialog createDialog(Component c, String title, boolean modal,
      JColorChooser chooserPane,ActionListener okLis,ActionListener cancelLis)
    Erzeugt einen neuen Dialog aufgrund des JColorChooser-Objekts mit Standardschaltflächen zum Bestätigen und Abbrechen.

JColorChooser-Objekte als spezielle Komponenten

Neben der statischen Methode showDialog(…) lässt sich auch der Konstruktor nutzen, um ein JColorChooser als spezielles JComponent-Objekt aufzubauen. Das bringt den Vorteil mit sich, dass die Farbauswahl nicht zwingend in einem eigenständigen Dialog stattfinden muss, sondern dass im Fall einer Komponente diese zusammen mit anderen Komponenten auf einen Container gesetzt werden kann. Änderungen an der Auswahl registriert ein ChangeListener, der etwa so angewendet wird:

chooser.getSelectionModel().addChangeListener( new ChangeListener() {
@Override public void stateChanged( ChangeEvent e ) {
Color c = ((ColorSelectionModel) e.getSource()).getSelectedColor();
}
} );

Weitere Beispiele finden sich unter http://www.java2s.com/Code/Java/Swing-JFC/Color-Chooser.htm. Wie ein neuer Reiter mit einer Graustufenanzeige eingebracht wird, zeigt etwa http://www.java2s.com/Code/Java/Swing-JFC/JColorChooserdialogwiththecustomGrayScalePanelpickertab.htm.

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java SE 8 Standard-Bibliothek Java SE 8 Standard-Bibliothek
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Java ist auch eine Insel
Java ist auch eine Insel


Zum Rheinwerk-Shop: Professionell entwickeln mit Java EE 8
Professionell entwickeln mit Java EE 8


Zum Rheinwerk-Shop: Besser coden
Besser coden


Zum Rheinwerk-Shop: Entwurfsmuster
Entwurfsmuster


Zum Rheinwerk-Shop: IT-Projektmanagement
IT-Projektmanagement


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2018
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern