Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Die Funktionsbibliothek
10 Threads und nebenläufige Programmierung
11 Raum und Zeit
12 Datenstrukturen und Algorithmen
13 Dateien und Datenströme
14 Die eXtensible Markup Language (XML)
15 Grafische Oberflächen mit Swing
16 Grafikprogrammierung
17 Netzwerkprogrammierung
18 Verteilte Programmierung mit RMI und Web-Services
19 JavaServer Pages und Servlets
20 Applets
21 Midlets und die Java ME
22 Datenbankmanagement mit JDBC
23 Reflection und Annotationen
24 Logging und Monitoring
25 Sicherheitskonzepte
26 Java Native Interface (JNI)
27 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort
Download: - ZIP, ca. 12,5 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> /Java-Insel | vor >>
Java ist auch eine Insel von Christian Ullenboom Programmieren mit der Java Standard Edition Version 6
Java ist auch eine Insel 7., aktualisierte Auflage geb., mit DVD (November 2007) 1.492 S., 49,90 Euro Galileo Computing ISBN 978-3-8362-1146-8 |
| 15 Grafische Oberflächen mit Swing
|  | 15.1 Das Abstract Window Toolkit und Swing
|  |  | 15.1.1 Abstract Window Toolkit (AWT)
|  |  | 15.1.2 Java Foundation Classes
|  |  | 15.1.3 Was Swing von AWT unterscheidet
|  |  | 15.1.4 Die Klasse Toolkit
|  | 15.2 Fenster unter grafischen Oberflächen
|  |  | 15.2.1 Swing-Fenster darstellen
|  |  | 15.2.2 AWT-Fenster darstellen
|  |  | 15.2.3 Sichtbarkeit des Fensters
|  |  | 15.2.4 Größe und Position des Fensters verändern
|  |  | 15.2.5 Unterklassen der Fenster-Klassen bilden
|  |  | 15.2.6 Fenster- und Dialog-Dekoration
|  |  | 15.2.7 Dynamisches Layout während einer Größenänderung
|  | 15.3 Beschriftungen (JLabel)
|  |  | 15.3.1 Mehrzeiliger Text, HTML in der Darstellung
|  | 15.4 Icon und ImageIcon für Bilder auf Swing-Komponenten
|  |  | 15.4.1 Die Schnittstelle Icon
|  | 15.5 Es tut sich was – Ereignisse beim AWT
|  |  | 15.5.1 Die Klasse AWTEvent
|  |  | 15.5.2 Events auf verschiedenen Ebenen
|  |  | 15.5.3 Swings Ereignisquellen und Horcher (Listener)
|  |  | 15.5.4 Listener implementieren
|  |  | 15.5.5 Listener bei dem Ereignisauslöser anmelden/abmelden
|  |  | 15.5.6 Aufrufen der Listener im AWT-Event-Thread
|  |  | 15.5.7 Adapterklassen nutzen
|  |  | 15.5.8 Innere Mitgliedsklassen und innere anonyme Klassen
|  | 15.6 Schaltflächen
|  |  | 15.6.1 Normale Schaltflächen (JButton)
|  |  | 15.6.2 Der aufmerksame ActionListener
|  |  | 15.6.3 Basisklasse AbstractButton
|  |  | 15.6.4 Wechselknopf (JToggleButton)
|  | 15.7 Swing Action
|  |  | 15.7.1 javax.swing.Action
|  |  | 15.7.2 Eigenschaften der Action-Objekte
|  | 15.8 JComponent und Component als Basis aller Komponenten
|  |  | 15.8.1 Tooltips
|  |  | 15.8.2 Rahmen (Border)
|  |  | 15.8.3 Fokus und Navigation
|  |  | 15.8.4 Ereignisse jeder Komponente
|  |  | 15.8.5 Die Größe und Position einer Komponente
|  |  | 15.8.6 Komponenten-Ereignisse
|  |  | 15.8.7 Hinzufügen von Komponenten
|  |  | 15.8.8 UI-Delegate – der wahre Zeichner
|  |  | 15.8.9 Undurchsichtige (opak) Komponente
|  |  | 15.8.10 Properties und Listener für Änderungen
|  |  | 15.8.11 Swing-Beschriftungen eine andere Sprache geben
|  | 15.9 Container
|  |  | 15.9.1 Standardcontainer (JPanel)
|  |  | 15.9.2 Bereich mit automatischen Rollbalken (JScrollPane)
|  |  | 15.9.3 Reiter (JTabbedPane)
|  |  | 15.9.4 Teilung-Komponente (JSplitPane)
|  | 15.10 Alles Auslegungssache: die Layoutmanager
|  |  | 15.10.1 Übersicht über Layoutmanager
|  |  | 15.10.2 Zuweisen eines Layoutmanagers
|  |  | 15.10.3 Im Fluss mit FlowLayout
|  |  | 15.10.4 Mit BorderLayout in allen Himmelsrichtungen
|  |  | 15.10.5 Rasteranordnung mit GridLayout
|  |  | 15.10.6 Der GridBagLayout-Manager
|  |  | 15.10.7 Null-Layout
|  |  | 15.10.8 BoxLayout
|  |  | 15.10.9 Weitere Layoutmanager
|  | 15.11 Rollbalken und Schieberegler
|  |  | 15.11.1 Schieberegler (JSlider)
|  |  | 15.11.2 Rollbalken (JScrollBar)
|  | 15.12 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen
|  |  | 15.12.1 Kontrollfelder (JCheckBox)
|  |  | 15.12.2 ItemSelectable, ItemListener und das ItemEvent
|  |  | 15.12.3 Sich gegenseitig ausschließende Optionen (JRadioButton)
|  | 15.13 Fortschritte bei Operationen überwachen
|  |  | 15.13.1 Fortschrittsbalken (JProgressBar)
|  |  | 15.13.2 Dialog mit Fortschrittsanzeige (ProgressMonitor)
|  | 15.14 Menüs und Symbolleisten
|  |  | 15.14.1 Die Menüleisten und die Einträge
|  |  | 15.14.2 Menüeinträge definieren
|  |  | 15.14.3 Einträge durch Action-Objekte beschreiben
|  |  | 15.14.4 Mit der Tastatur: Mnemonics und Shortcut
|  |  | 15.14.5 Der Tastatur-Shortcut (Accelerator)
|  |  | 15.14.6 Tastenkürzel (Mnemonics)
|  |  | 15.14.7 Symbolleisten alias Toolbars
|  |  | 15.14.8 Popup-Menüs
|  |  | 15.14.9 System-Tray nutzen
|  | 15.15 Das Model-View-Controller-Konzept
|  | 15.16 Auswahlmenüs, Listen und Spinner
|  |  | 15.16.1 Auswahlmenü (JComboBox)
|  |  | 15.16.2 Zuordnung einer Taste mit einem Eintrag
|  |  | 15.16.3 Datumsauswahl
|  |  | 15.16.4 Listen (JList)
|  |  | 15.16.5 Drehfeld (JSpinner)
|  | 15.17 Texteingabefelder
|  |  | 15.17.1 Text in einer Eingabezeile
|  |  | 15.17.2 Die Oberklasse der Text-Komponenten (JTextComponent)
|  |  | 15.17.3 Geschützte Eingaben (JPasswordField)
|  |  | 15.17.4 Validierende Eingabefelder (JFormattedTextField)
|  |  | 15.17.5 Einfache mehrzeilige Textfelder (JTextArea)
|  |  | 15.17.6 Editor-Klasse (JEditorPane)
|  | 15.18 Tabellen (JTable)
|  |  | 15.18.1 Ein eigenes Tabellen-Model
|  |  | 15.18.2 Basisklasse für eigene Modelle (AbstractTableModel)
|  |  | 15.18.3 Vorgefertigtes Standard-Modell (DefaultTableModel)
|  |  | 15.18.4 Ein eigener Renderer für Tabellen
|  |  | 15.18.5 Zell-Editoren
|  |  | 15.18.6 Größe und Umrandung der Zellen
|  |  | 15.18.7 Spalteninformationen
|  |  | 15.18.8 Tabellenkopf von Swing-Tabellen
|  |  | 15.18.9 Selektionen einer Tabelle
|  |  | 15.18.10 Automatisches Sortieren und Filtern mit RowSorter
|  |  | 15.18.11 Ein professionelles Tabellenlayout mit JGrid
|  | 15.19 Bäume (JTree)
|  |  | 15.19.1 JTree und sein TreeModel und TreeNode
|  |  | 15.19.2 Selektionen bemerken
|  |  | 15.19.3 Das TreeModel von JTree
|  | 15.20 JRootPane, JLayeredPane und JDesktopPane
|  |  | 15.20.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane)
|  |  | 15.20.2 JLayeredPane
|  |  | 15.20.3 JDesktopPane und die Kinder JInternalFrame
|  | 15.21 Dialoge und Window-Objekte
|  |  | 15.21.1 JWindow und JDialog
|  |  | 15.21.2 Modal oder nicht-modal
|  |  | 15.21.3 Standarddialoge mit JOptionPane
|  |  | 15.21.4 Der Farbauswahldialog JColorChooser
|  |  | 15.21.5 Der Dateiauswahldialog
|  | 15.22 Flexibles Java-Look
|  |  | 15.22.1 L & F global setzen
|  |  | 15.22.2 UIManager
|  |  | 15.22.3 Verbessern des Aussehens unter Windows mit JGoodies Looks
|  | 15.23 Die Zwischenablage (Clipboard)
|  |  | 15.23.1 Clipboard-Objekte
|  |  | 15.23.2 Auf den Inhalt zugreifen mit Transferable
|  |  | 15.23.3 DataFlavor ist das Format der Daten in der Zwischenablage
|  |  | 15.23.4 Einfügungen in der Zwischenablage erkennen
|  |  | 15.23.5 Drag
|  | 15.24 Undo durchführen
|  | 15.25 AWT, Swing und die Threads
|  |  | 15.25.1 Ereignisschlange (EventQueue) und AWT-Event-Thread
|  |  | 15.25.2 Swing ist nicht Thread-sicher
|  |  | 15.25.3 Swing-Elemente mit invokeLater() und invokeAndWait() bedienen
|  |  | 15.25.4 SwingWorker
|  |  | 15.25.5 Eigene Ereignisse in die Queue setzen
|  |  | 15.25.6 Auf alle Ereignisse hören
|  | 15.26 Barrierefreiheit mit der Java Accessibility API
|  | 15.27 Benutzerinteraktionen automatisieren
|  |  | 15.27.1 Automatisch in die Tasten hauen
|  |  | 15.27.2 Mausoperationen
|  |  | 15.27.3 Methoden zur Zeitsteuerung
|  |  | 15.27.4 Screenshots
|  |  | 15.27.5 MouseInfo und PointerInfo
|  | 15.28 Zeitliches Ausführen mit dem javax.swing.Timer
|  | 15.29 Alternativen zu AWT und Swing
|  |  | 15.29.1 XML-Beschreibungen der Oberfläche: Swixml, XUL/Luxor
|  |  | 15.29.2 SWT (Standard Widget Toolkit)
|  | 15.30 Zum Weiterlesen
## 15.21 Dialoge und Window-Objekte Seit den ersten Swing-Tagen besitzt Swing Standard-Dialoge wie einen Dateiauswahl-, Druck- oder Farbauswahldialog, aber auch viele interessante Dialoge sind als quelloffene Komponenten verfügbar. Dazu zählen etwa ein Dialog zur Auswahl von Zeichensätzen oder Verzeichnissen (etwa bei http://common.l2fprod.com/) oder Wizards (http://xito.sourceforge.net/projects/dialog/index.php). ### 15.21.1 JWindow und JDialog 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 | Fenster | Window | Dialog
Modal | Nein | Nein | Kann
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 | Nein | Mit Hack12 ja
### 15.21.2 Modal oder nicht-modal 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, nennt sich dieser Zustand nicht-modal. [((Frame) dialog.getOwner()).setIconImage(image); ] 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, Frame oder 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. ### 15.21.3 Standarddialoge mit JOptionPane Die Klasse JOptionPane erlaubt einfache Meldedialoge, Eingabedialoge, Bestätigungsdialoge und Optionsdialoge mit nur einem statischen Funktionsaufruf der Art showXXXDialog(). Einige Beispiele: Listing 15.65 com/tutego/insel/ui/dialog/JOptionPaneDialog.java
    package com.tutego.insel.ui.dialog;

    import javax.swing.*;
    public class JOptionPaneDialog
    {
      public static void main( String[] args )
      {
        // Meldedialog

        JOptionPane.showMessageDialog( null, "Wir Kinder aus dem Möwenweg" );

        // Eingabedialog

        JOptionPane.showInputDialog( "Bitte Zahl eingeben" );

        // Bestätigungsdialog

        JOptionPane.showConfirmDialog( null, "Alles OK?" );

        // Auswahldialog

        String[] options = {
          "männlich", "weiblich", "keine Ahnung", "ändert sich ständig" };

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

        System.out.println( sex );

        // Angepasster Optionsdialog

        String[] optionen = { "Ja", "Nein", "Abbrechen" };

        int n = JOptionPane.showOptionDialog( null,
                  "Ja oder Nein?",      // Fragetext
                  "Ja/Nein/Abbrechen",  // Titel
                  JOptionPane.YES_NO_CANCEL_OPTION,
                  JOptionPane.QUESTION_MESSAGE,  // Icon
                  null, optionen,optionen[0] );

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

        System.exit( 0 );
      }
    }
Einige Funktionen erwarten als erstes Argument eine Vater-Komponente, die null sein kann. Sie dient zur relativen Ausrichtung des Dialogs und verknüpft den Dialog derart mit einem Fenster, dass, wenn das Fenster versteckt wird, auch der Dialog verschwindet. Die Methode showConfirmDialog() ist sehr flexibel, denn sie erlaubt die Angabe für Icon, Überschrift, Fragetext und Beschriftung der Schaltflächen. Bei den Methoden showMessageDialog(), showConfirmDialog() und showOptionDialog() zeigt eine Rückgabe an, was der Benutzer wählte. Mögliche Rückgaben sind Ganzzahlen, die die Konstanten YES_OPTION, NO_OPTION, CANCEL_OPTION, OK_OPTION oder CLOSED_OPTION benennen. Die drei Methoden 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. Selten gibt es die Notwendigkeit, nicht die statischen Funktionen showXXXDialog() einzusetzen. Erforderlich kann ein Exemplar der Klasse JOptionPane aber dann sein, wenn zum Beispiel beim Klick auf das X vom Dialog-Fenster der Dialog nicht verschwinden soll oder wenn zum Beispiel gewisse Werte im Textfeld bei showInputDialog() nicht erwünscht sind, wie Folgen von Leerzeichen. 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 );
### 15.21.4 Der Farbauswahldialog JColorChooser Mit einem JColorChooser lassen sich Farben in drei unterschiedlichen Reitern 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() 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 15.66 com/tutego/insel/ui/dialog/JColorChooserDemo.java
    package com.tutego.insel.ui.dialog;

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

    public class JColorChooserDemo
    {
      public static void main( String[] args )
      {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        JButton b = new JButton( "Farbe ändern" );
        f.add( b );
        b.addActionListener( new ActionListener()
        {
          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 );
      }
    }
Hier klicken, um das Bild zu vergrößern Abbildung 15.21 Der Farbauswahldialog JColorChooser 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.
    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 [Bevor die Ereignisbehandlung im Hauptprogramm weitergeht, muss das Dialogfeld geschlossen werden. ] 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 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() {
      public void stateChanged( ChangeEvent e ) {
        Color c = ((ColorSelectionModel) e.getSource()).getSelectedColor();
      }
    } ) ;
Weitere Beispiele finden sich beim Java Developers Almanac unter http://javaalmanac.com/egs/javax.swing.colorchooser/pkg.html. Die Themen sind unter anderem: Anpassen der Anzeige und Umsortierung der Reiter. Üblich sind drei Reiter mit den Aufschriften »Muster« (auf einer englischsprachigen Oberfläche »Swatch«), HSB und RGB. Wie ein neuer Reiter mit einer Graustufenanzeige eingebracht wird, zeigt http://tutego.com/go/grayscale. ### 15.21.5 Der Dateiauswahldialog Die Klasse JFileChooser (unter AWT heißt die Klasse FileDialog) simuliert einen betriebssystemabhängigen Dateiauswahldialog 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 javax.swing.filechooser.FileFilter zur Auswahl spezieller Dateien setzen. Erst nach dem Schließen und Beenden mit dem OK-Button stehen ausgewählte Dateien zur Verfügung.
Beispiel Einen Dateiauswahldialog auf den Schirm bringen:
    JFileChooser fc = new JFileChooser();
    int state = fc.showOpenDialog( null );
Die gewählte Datei erfragt getSelectedFile(), und die Rückgabe ist JFileChooser. APPROVE_OPTION, JFileChooser.CANCEL_OPTION oder JFileChooser.ERROR_OPTION.
#### 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 alle Dateien mit der Endung .txt aussondert. Zudem soll unser Filter alle Verzeichnisse zulassen. Die Realisierung des Filterns erfolgt durch die Implementierung der Schnittstelle FileFilter. Obwohl wir eine Schnittstelle unter diesem Namen schon kennen, handelt es sich nicht um diejenige aus dem java.io-Paket, sondern um eine Schnittstelle aus dem Paket javax. swing.filechooser. Die die Schnittstelle FileFilter implementierenden Klassen müssen eine accept()-Methode realisieren und eine Methode getDescription(), die eine Zeichenkette liefert. Listing 15.67 com/tutego/insel/ui/dialog/JFileChooserDemo.java
    package com.tutego.insel.ui.dialog;

    import java.io.File;
    import javax.swing.*;
    import javax.swing.filechooser.FileFilter;

    public class JFileChooserDemo
    {
      public static void main( String[] args )
      {
        JFileChooser fc = new JFileChooser();

        fc.setFileFilter( new FileFilter()
        {
          @Override public boolean accept( File f )
          {
            return f.isDirectory() ||
              f.getName().toLowerCase().endsWith( ".txt" );
          }
          @Override public String getDescription()
          {
            return "Texte";
          }
        } );

        int state = fc.showOpenDialog( null );

        if ( state == JFileChooser.APPROVE_OPTION )
        {
          File file = fc.getSelectedFile();
          System.out.println( file.getName() );
        }
        else
          System.out.println( "Auswahl abgebrochen" );

        System.exit( 0 );
      }
    }
Hier klicken, um das Bild zu vergrößern Abbildung 15.22 Der Dateiauswahldialog
Tipp Im Speichern-Dialog ist ein Standardname anzugeben. 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") );
    class javax.swing.JFileChooser
    extends JComponent
    implements Accessible
Zum Erzeugen eines Auswahldialogs steht eine Reihe von Konstruktoren zur Auswahl: JFileChooser() Erzeugt einen Dateidialog ohne Titel zum Öffnen einer Datei. Zeigt auf das Benutzerverzeichnis. JFileChooser( File currentDirectory ) Wie JFileChooser(), aber zeigt beim Start auf ein Verzeichnis. JFileChooser( String currentDirectoryPath ) Wie 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 setFileFilter( javax.swing.filechooser.FileFilter filter ) Setzt einen FileFilter zur Anzeige der gewünschten Dateien. void setFileHidingEnabled( boolean b ) Ob verborgene Dateien angezeigt werden sollen. void setFileView( FileView fileView ) Standardmäßig zeigt der Dialog neben dem Dateinamen ein kleines Bild an. Das lässt sich mit einem einen FileView-Objekt anpassen. void setAccessory( JComponent newAccessory ) Setzt eine Komponente für eine mögliche Vorschau.
Hinweis Sollen im Dialog nur Verzeichnisse, aber keine Dateien auftauchen, so lässt sich dies mit setFileSelectionMode() 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.
Ein konkreter Filter implementiert die Schnittstelle javax.swing.filechooser.FileFilter.
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. #### Vorschaubilder Die Methode setAccessory() kann eine JComponent 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, was ein Listener abfängt und testet, ob es JFileChooser.SELECTED_FILE_CHANGED_PROPERTY war. Um das Vorgehen kurz zu skizzieren, folgende Ereignisbehandlung:
    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.
      }
    }
### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.
Name |
E-Mail |
Ihr Kommentar |
<< zurück | <top> | vor >>

Copyright © Galileo Press 2008
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.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de