DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine...

47
DVG2 - 09 - Swing 1 SWING

Transcript of DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine...

Page 1: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 1

SWING

Page 2: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 2

ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit,

Farben auszuwählen. Konstruktor:

public JColorChooser()public JColorChooser(Color initialColor)

Für Änderungen der ausgewählten Farbe ist der ChangeListener zuständig.

Mit Hilfe der Methodepublic static Color showDialog( Component component, String title, Color initialColor)kann ein extra Fenster geöffnet werden das einen ColorChooser enthält. Die gewählte Farbe wird als return-Wert zurückgegeben.

Page 3: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 3

Beispiel 7public B7()

{

Color bgc = JColorChooser.showDialog(this,

"Hintergrundfarbe festlegen", getBackground());

Color fgc = JColorChooser.showDialog(this,

"Vordergrundfarbe festlegen", getForeground());

JLabel l = new JLabel("Das sind die neuen Farben");

l.setFont(new Font("Arial", Font.BOLD, 40));

l.setForeground(fgc);

setBackground(bgc);

add(l);

}

Page 4: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 4

FileChooser Die Klasse FileChooser ermöglicht die Auswahl einer Datei aus dem

Filesystem. Applets sind nicht befugt, auf Clientdaten zuzugreifen. Daher ist in

Applets die Verwendung von FileChoosern stark eingeschränkt. Es können Filter verwendet werden, um nur bestimmte Dateitypen

anzeigen zu lassen. Es kann die Darstellung eigener Icons für die Dateien veranlasst

werden. Es kann eine Dateivorschau programmiert werden. Die Darstellung kann durch eigene Erweiterungen verändert werden. Konstuktor:

public JFileChooser() public JFileChooser(String currentDirectoryPath)public JFileChooser(File currentDirectory)erstellt ein FileChooser-Objekt mit dem angegebenen Anfangsverzeichnis bzw. dem Home-Verzeichnis des Nutzers.

Page 5: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 5

Öffnen des JFileChooser-Dialogs Der FileChooser-Dialog wird durch folgende Methoden geöffnet:

public int showDialog(Component parent, String approveButtonText) public int showOpenDialog(Component parent)public int showSaveDialog(Component parent)approveButtonText enthält dabei die Beschriftung des Buttons mit dem die Auswahl bestätigt wird.Component enthält die Swing-Komponente, in der das JFileChooser-Objekt erzeugt worden ist.

Bei showOpenDialog bzw. showSaveDialog wird die Beschriftung durch das L&F festgelegt.

Die Methoden geben einen Wert zurück, aus dem geschlossen werden kann wie der Dialog beendet wurde:JFileChooser.CANCEL_OPTION: Cancel-Button wurde betätigtJFileChooser.APPROVE_OPTION: Auswahl wurde bestätigtJFileCHooser.ERROR_OPTION: Es ist ein Fehler eingetreten

Page 6: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 6

Abfragen der ausgewählten Dateien Mit den Methoden

public File getSelectedFile()public File getCurrentDirectory()können ausgewählte Dateien und das letzte aktuelle Verzeichnis abgefragt werden.

Es gibt entsprechende Methoden um ausgewählte Dateien oder Verzeichnisse zu setzen:public void setSelectedFile(File file)public void setCurrentDirectory(File dir)public void changeToParentDirectory()public void rescanCurrentDirectory()

Page 7: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 7

Beispiel 8public class B8 extends JPanel implements ActionListener

{

...

JLabel la;

File startDir = null;

public B8_1()

{

setLayout(new FlowLayout());

JButton jb = new JButton("Open File");

jb.addActionListener(this);

add(jb);

la = new JLabel("Es ist kein File ausgewählt");

add(la);

}

Page 8: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 8

public void actionPerformed(ActionEvent e){Component comp = (Component)e.getSource();while (! (comp instanceof JPanel) ) comp=comp.getParent();JPanel pane = (JPanel)comp;

JFileChooser chooser = new JFileChooser(startDir);try{

int returnVal = chooser.showOpenDialog(pane);if(returnVal == JFileChooser.APPROVE_OPTION){

startDir=chooser.getCurrentDirectory();la.setText("Open "+chooser.getSelectedFile().getCanonicalPath());

}}catch (IOException ioe){

la.setText("Fehler beim Bestimmen des FileNamens: "+chooser.getSelectedFile().getName());

}}

Page 9: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 9

Filtern der angezeigten Dateien Oft ist es sinnvoll, nur bestimmte Dateien anzuzeigen, z.B. nur java-

Dateien oder Grafikfiles. Die Auswahl der anzuzeigenden Dateien und Verzeichnisse kann

über ein oder mehrere FileFilter-Objekte gesteuert werden. Als FileFilter können Objekte der Klasse

javax.swing.filechooser.FileFilter verwendet werden. FileFilter werden mit den Methoden

public void setFileFilter(FileFilter filter)public void addChoosableFileFilter(FileFilter filter)zum JFileChooser-Objekt hinzugefügt.

Mit der Methodepublic void setAcceptAllFileFilterUsed(boolean b)wird der AcceptAllFileFilter aktiviert (b==true) bzw. deaktiviert (b==false).

Page 10: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 10

Die abstrakte Klasse FileFilter Die abstrakte Klasse FileFilter aus dem Package

javax.swing.filechooser definiert zwei Methoden:public abstract boolean accept(File f)public abstract String getDescription()

Die Methode accept entscheidet darüber ob eine Datei oder ein Verzeichnis angezeigt wird (Wert==true) oder nicht (Wert==false).

Es ist meistens sinnvoll Verzeichnisse immer anzuzeigen, damit man durch das Filesystem navigieren kann.

getDescription gibt eine kuze Beschreibung des Filters aus, z.B. „Bilddateien (*.gif, *.jpg, *.tif)“

Page 11: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 11

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

public class ImageFileFilter extends FileFilter {

public boolean accept(File f){return f.isDirectory() ||

f.getName().toUpperCase().endsWith(".GIF") || f.getName().toUpperCase().endsWith(".JPG");

}

public String getDescription(){return "Bilder (*.gif, *.jpg)";}}

Page 12: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 12

FileView Um den Typ der Dateien anhand der Icons unterscheiden zu können,

kann ein Objekt der Klasse FileView zu dem JFileChooser-Objekt hinzugefügt werden.

Ein FileView-Objekt wird mit der Methodepublic void setFileView(FileView fileView)zu dem JFileChooser-Objekt hinzugefügt werden.

Die abstrakte Klasse FileView definiert fünf Methoden: public String getName(File f) public String getDescription(File f) public String getTypeDescription(File f) public Icon getIcon(File f) public Boolean isTraversable(File f)

Liefert eine dieser Methoden den Wert null, wird die entsprechende Eigenschaft aus dem L&F gewählt.

Page 13: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 13

Beispielpublic class ImageFileView extends FileView {ImageIcon jpgIcon = new ImageIcon("images/jpgIcon.gif");ImageIcon gifIcon = new ImageIcon("images/gifIcon.gif");public String getName(File f) { return null; }public String getDescription(File f) { return null; }public Boolean isTraversable(File f) { return null; }public String getTypeDescription(File f){

String fnu = f.getName().toUpperCase();if (fnu.endsWith(".JPG")) return "JPEG Image";if (fnu.endsWith(".GIF")) return "GIF Image";return null;

}public Icon getIcon(File f){

String fnu = f.getName().toUpperCase();if (fnu.endsWith(".JPG")) return jpgIcon;if (fnu.endsWith(".GIF")) return gifIcon;return null;

}}

Page 14: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 14

Dateivorschau Besonders bei Bilddatei ist eine Vorausschau sinnvoll. Diese kann neben anderen Erweiterungen vom Programmierer

eingebaut werden. Möglich sind z.B. besondere Bedienelemente, die vom Dateityp

abhängen oder Elemente, die der Suche von Dateien oder deren Bearbeitung dienen.

Mit Hilfe der Methodepublic void setAccessory(JComponent newAccessory)wird eine beliebige Swing-Componente hinzugefügt. Diese wird innerhalb des FileChooser-Fensters angezeigt.

Über Listener kann diese Komponente auf Änderungen reagieren.

Page 15: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 15

Beispielpublic class ImagePreview extends JComponent implements PropertyChangeListener {ImageIcon thumbnail = null;File file = null;public ImagePreview(JFileChooser fc) { setPreferredSize(new Dimension(100, 50)); fc.addPropertyChangeListener(this);}public void loadImage() { if (file == null) return; ImageIcon tmpIcon = new ImageIcon(file.getPath()); if (tmpIcon.getIconWidth() > 90) { thumbnail = new ImageIcon( tmpIcon.getImage(). getScaledInstance(90, -1, Image.SCALE_DEFAULT)); } else thumbnail = tmpIcon;}

Page 16: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 16

Beispielpublic void propertyChange(PropertyChangeEvent e) { String prop = e.getPropertyName(); if ( prop.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) { file = (File) e.getNewValue(); if (isShowing()) { loadImage(); repaint(); } }}public void paintComponent(Graphics g) { if (thumbnail == null) loadImage(); if (thumbnail != null) { int x = getWidth()/2 - thumbnail.getIconWidth()/2; int y = getHeight()/2 - thumbnail.getIconHeight()/2; if (y < 0) y = 0; if (x < 5) x = 5; thumbnail.paintIcon(this, g, x, y); }} }

Page 17: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 17

JTabbedPane JTabbedPane ermöglicht es, in einem Fenster mehrere Ebenen

darzustellen. Die verschiedenen Ebenen können durch „Reiter“ (Tabs) ausgewählt

werden. Zum Hinzufügen einer Ebene dienen die Methoden

public void addTab(String title, Component component) public void addTab(String title, Icon icon, Component component)public void addTab(String title, Icon icon, Component component, String tip)

title : Name der Ebenecomponent : hinzuzufügende Komponenteicon : anzuzeigendes Icontip : ToolTip Text für diese Ebene

Page 18: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 18

Beispiel 9public B9(){ JTabbedPane pane = new JTabbedPane(); JPanel tab1 = new JPanel(); JPanel tab2 = new JPanel(); JPanel tab3 = new JPanel(); JPanel tab4 = new JPanel(); tab1.add(new JLabel("Table")); tab2.add(new JLabel("FileChooser")); tab3.add(new JLabel("ColorChooser")); tab4.add(new JLabel("ProgressBar")); pane.addTab("Table", null, tab1, "ToolTip : Table"); pane.addTab("FileChooser", null, tab2, "ToolTip : FileChooser"); pane.addTab("ColorChooser", null, tab3, "ToolTip : ColorChooser"); pane.addTab("ProgressBar", null, tab4, "ToolTip : ProgressBar"); add(pane);}

Page 19: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 19

Tabellen Tabellen werden mit der Klasse JTable erzeugt. JTable unterstützt den Aufbau von Tabellen mit beliebigen Inhalten. Tabellenzellen können geändert werden oder für Änderungen

gesperrt sein. Auf Änderungen von Zellen kann mit Listenern reagiert werden. Um alle Funktionalitäten nutzen zu können muss man mit

TableModels arbeiten. Für einfache Standardtabellen gibt es spezielle Konstruktoren.

public JTable(Object[][] rowData, Object[] columnNames)

Mit diesem Konstruktor wird eine Tabelle erzeugt, die als Überschriften die Feldelemente von columnNames hat und als Feldinhalte die Feldelement von rowData.

Damit die Überschriften angezeigt werden und große Tabellen dargestellt werden können bettet man die Tabelle am besten in ein JScrollPane ein.

Page 20: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 20

Mit der Methodepublic void setPreferredScrollableViewportSize(Dimension size) der Klasse JTable wird die Anfangsgröße der Tabelle festgelegt.

Standardmäßig werden alle Spalten gleich breit angezeigt. Mit der Methodepublic void setPreferredWidth(int preferredWidth)der Klasse TableColumn kann die Standardbreite einer Spalte festgelegt werden. Wenn später die Breite der Tabelle verändert wird, werden die Relationen der Spaltenbreiten beibehalten. Die Methode kann folgendermaßen aufgerufen werden:table.getColumnModel().getColumn(i).setPreferredWidth(breite)

Page 21: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 21

Einfache Tabelleprivate Component makeSimpleJTable(){ Object[][] data = {{"Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false)},{"Alison", "Huml", "Rowing", new Integer(3), new Boolean(true)},{"Kathy", "Walrath", "Chasing toddlers", new Integer(2), new Boolean(false)},{"Mark", "Andrews", "Speed reading", new Integer(20), new Boolean(true)},{"Angela", "Lih", "Teaching high school", new Integer(4), new Boolean(false)}

}; String[] columnNames ={"First Name","Last Name","Sport","# of Years", "Vegetarian"};

JTable table = new JTable(data, columnNames); table.setPreferredScrollableViewportSize( new Dimension(500, 70)); TableColumnModel columnModel = table.getColumnModel(); for (int i = 0; i < table.getColumnCount(); i++) { if(i==2)columnModel.getColumn(i).setPreferredWidth(100); else columnModel.getColumn(i).setPreferredWidth(50); } return new JScrollPane(table);}

Page 22: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 22

TableModels Um kompliziertere Tabellen zu erzeugen benötigt man TableModels. Am einfachsten leitet man ein TableModel von der abstrakten Klasse

AbstractTableModel ab. Es müssen unbedingt folgende Methoden implementiert werden:public int getRowCount()public int getColumnCount()public Object getValueAt(int row, int column)

Weitere wichtige Methoden die implementiert werden können sind:public String getColumnName(int column)public Class getColumnClass(int c)public boolean isCellEditable(int row, int col)public void setValueAt(Object value, int row, int col)

Mit Hilfe verschiedener fireXXX-Methoden können Listener benachrichtigt werden. Besonders wichtig ist die Methode:public void fireTableCellUpdated(int row, int column)

Page 23: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 23

Beispiel JTable1private Component makeJTable1(){ final Object[][] data = {...}; final String[] columnNames = {...}; AbstractTableModel tableModel = new AbstractTableModel() { public int getRowCount() { return data.length; } public int getColumnCount() { return data[0].length; } public Object getValueAt(int row, int column) { return data[row][column]; } public String getColumnName(int column) { return columnNames[column]; } public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } public boolean isCellEditable(int row, int col) { return true; } public void setValueAt(Object value, int row, int col) { data[row][col] = value; fireTableCellUpdated(row, col); } };

Page 24: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 24

JTable table = new JTable(tableModel); table.setPreferredScrollableViewportSize( new Dimension(500, 70)); TableColumnModel columnModel = table.getColumnModel(); for (int i = 0; i < table.getColumnCount(); i++) { if (i == 2) columnModel.getColumn(i).setPreferredWidth(100); else columnModel.getColumn(i).setPreferredWidth(50); } return new JScrollPane(table);}

Page 25: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 25

Zellrenderer Für die Darstellung eines Objektes in einer Zelle wird ein Objekt

verwendet, das das Interface TableCellRenderer implementiert. Das Interface TableCellRenderer definiert eine abstrakte

Methode:public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)table: Tabelle in der gerendert wirdvalue: Wert, der dargestellt werden sollisSelected: Angabe ob die Zelle selektiert ist (true) oder nicht (false)hasFocus: Angabe ob die Zelle gerade den Focus besitztrow: Zeilennummer der Zellecolumn: Spaltennummer der Zelle

Rückgabewert: AWT-Componente, die den Wert darstellt

Page 26: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 26

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

public class StudentRenderer implements TableCellRenderer{public Component getTableCellRendererComponent(

JTable table, Object value, boolean isSelected,boolean hasFocus, int row, int column)

{Student s = (Student)value;JLabel comp = new JLabel(""+s.getMatrikelNummer());comp.setToolTipText(s.getNachName()+

", "+s.getVorName());comp.setHorizontalAlignment(JLabel.RIGHT);return comp;

}}

Page 27: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 27

Aktivieren des TableCellRenderers Aktivieren als Standardrenderer für eine Klasse mit der Methode

public void setDefaultRenderer(Class columnClass, TableCellRenderer renderer) der Klasse JTable:table.setDefaultCellRenderer(Student.class, new StudentRenderer())

Die Klasse wird für eine ganze Tabellenspalte einheitlich mit der Methode getColumnClass des TableModel-Objektes bestimmt, das zu der Tabelle gehört.

Alternativ kann der TableCellRenderer einer Spalte direkt gesetzt werden:table.getColumnModel().getColumn(3).setCellRenderer(new StudentRenderer())

Page 28: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 28

Zelleditor Falls eine Zelle geändert werden soll, muss eine Eingabe ermöglicht

werden. Die Art der Eingabe ist sehr stark von dem konkreten Objekt abhängig:Boolean: JCheckBoxText: JTextFieldNumber: JTextField mit anschließender KonvertierungAuswahl: JComboBox

Allgemein wird ein TableCellEditor-Objekt aufgerufen, der Die Darstellung des zu editierenden Objektes enthält Den Dialog realisiert Das Ergebnis an die Tabelle ausliefert

Page 29: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 29

DefaultCellEditor Die einfachste Möglichkeit einen TableCellEditor zu bilden die

Klasse DefaultCellEditor aus javax.swing. Konstruktoren:

public DefaultCellEditor(JTextField textField) public DefaultCellEditor(JCheckBox checkBox) public DefaultCellEditor(JComboBox comboBox)

Page 30: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 30

Beispiel JTableEditorJComboBox comboBox = new JComboBox();comboBox.addItem("Snowboarding");comboBox.addItem("Rowing");comboBox.addItem("Chasing toddlers");comboBox.addItem("Speed reading");comboBox.addItem("Teaching high school");comboBox.addItem("None");table.getColumnModel().getColumn(2).

setCellEditor(new DefaultCellEditor(comboBox));

Page 31: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 31

AbstractCellEditor Zur einfacheren Erzeugung eins TableCellEditors kann die

abstrakte Klasse AbstractCellEditor benutzt werden. Dieses implementiert allerdings nur das Interface CellEditor. TableCellEditor ist auch von CellEditor abgeleitet und

definiert die zusätzliche Methode getTableCellEditorComponent.

Page 32: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 32

public class StudentEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {private StudentenDB db = null;private JComboBox cb = new JComboBox();public StudentEditor(StudentenDB db) {

this.db=db;cb.setRenderer(new StudentRenderer());cb.addActionListener(this);

}public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

cb.removeAllItems();Iterator it = db.getStudenten().iterator();while (it.hasNext()) cb.addItem(it.next());return cb;

}public Object getCellEditorValue() {

return cb.getSelectedItem();}public void actionPerformed(ActionEvent e) {

stopCellEditing();}}

Page 33: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 33

public class StudentRenderer implements TableCellRenderer, ListCellRenderer {public Component getTableCellRendererComponent(

JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){

Student s = (Student)value;JLabel comp = new JLabel(""+s.getMatrikelNummer());comp.setToolTipText(s.getNachName()+", "+s.getVorName());comp.setHorizontalAlignment(JLabel.RIGHT);return comp;

}

public Component getListCellRendererComponent(JList list, Object value, int index, boolean

isSelected, boolean cellHasFocus){

Student s = (Student)value;return new JLabel(s.getNachName()+", "+s.getVorName()+"("+s.getMatrikelNummer()+")");

}}

Page 34: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 34

Layout Container enthalten AWT-Objekte Wenn mehrere Objekte enthalten sind, stellt sich die Frage der

Anordnung der Objekte, des Layouts. Die Anordnung der Objekte kann mit Hilfe der Layout-Managers

beeinflusst werden. Alle von Container abgeleiteten Klassen erben die Methode

public void setLayout(LayoutManager mgr) LayoutManager ist ein Interface man kann prinzipiell eigene

LayoutManager entwickeln. Vom Interface LayoutManager ist das Interface LayoutManager2

abgeleitet. Mit diesem Interface können kompliziertere Layouts realisiert werden.

In AWT sind einige gebräuchliche Layouts realisiert.

Page 35: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 35

Von LayoutManager abgeleitete Layouts GridLayout

Tabellen-Layout feste Anzahl von Zeilen und/oder

Spalten Zeilenhöhe und Spaltenbreite

gleichmäßig

FlowLayout

fließendes Layout

passt sich der Größe des Fensters an

sortiert die Komponenten automatisch

Page 36: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 36

Von LayoutManager2 abgeleitete Layouts CardLayout

organisiert mehrere Seiten wie Karteikarten Spezielle Methoden erlauben das Blättern und

Positionieren Besser mit JTabbedPane realisieren

BorderLayout

Randkomponenten um eine zentrale Komponente platziert

GridBagLayout

Verallgemeinertes Tabellen-Layout

Zusammenfassung von Zellen

Steuerung der Höhen und Breiten

Page 37: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 37

BoxLayout Die Komponenten werden

nebeneinander oder übereinander angeordnet.

Page 38: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 38

Kombination von Layouts Zur Beschreibung komplizierterer Layouts können diese kombiniert

werden. Statt einer Komponente wird ein Container platziert. Dieser Container

erhält ein eigenes Layout.

GridLayout

BorderLayout

GridBagLayout

Page 39: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 39

ToolBars Mit ToolBars kann man wichtige Funktionen schnell erreichbar

gestalten. In einem ToolBar können beliebige Swing-Komponenten angeordnet

werden. Die Funktionen werden über Listener aktiviert. Es wird empfohlen, ToolBars zu Containern hinzuzufügen, die mit

einem BorderLayout versehen sind. Dabei sollte der ToolBar zu einer Seite hinzugefügt werden und die anderen drei Seiten sollten leer bleiben.

Konstruktoren:public JToolBar()public JToolBar(int orientation)public JToolBar(String name)public JToolBar(String name, int orientation)name : Titel des Fensters, wenn der ToolBar extra dargestellt wirdorientation : HOROZONTAL oder VERTICAL Anfangsorientierung

Mit der Methodepublic void addSeparator()wird ein Separator eingefügt

Page 40: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 40

BeispieltoolBar.add(makeToolBarButton(null, "EX", "Exit"));toolBar.addSeparator();toolBar.add(makeToolBarButton("images/fl.gif", null, "FlowLayout"));

...

panel.add(toolBar, BorderLayout.SOUTH);

...private JButton makeToolBarButton (String iconName, String label, String text){ JButton button = new JButton(label); if ( iconName!=null) button.setIcon(new ImageIcon(iconName)); button.setToolTipText(text); button.addActionListener(this); button.setActionCommand(text); return button;}

Page 41: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 41

public void actionPerformed(ActionEvent e){

String comm = e.getActionCommand();if (comm.equals("Exit")) System.exit(0);int index = tPane.indexOfTab(comm);if (index>=0) tPane.setSelectedIndex(index);

}

Page 42: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 42

Menüs Zu Swing-Containern lassen sich Menüs hinzufügen. Menüs bestehen aus

Einem JMenuBar-Objekt, das Mehrere JMenu-Objekte enthalten kann, die wiederum Mehrere JMenuItem-Objekte enthalten können.

Page 43: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 43

Konstruktoren public JMenuBar() public JMenu() public JMenu(String s) public JMenuItem() public JMenuItem(Icon icon) public JMenuItem(String text) public JMenuItem(String text, Icon icon) public JMenuItem(String text, int mnemonic) public JCheckBoxMenuItem() public JCheckBoxMenuItem(Icon icon) public JCheckBoxMenuItem(String text) public JCheckBoxMenuItem(String text, Icon icon) public JCheckBoxMenuItem(String text, boolean b) public JCheckBoxMenuItem(String text, Icon icon,

boolean b) analog JRadioButtonMenuItem

Page 44: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 44

JRadioButtonMenuItems müssen zu einer ButtonGroup hinzugefügt werden, damit definiert ist, welche Items alternativ ausgewählt werden können.

JMenuItems, JCheckBoxMenuItems und JRadioButtonMenuItems verhalten sich bei Betätigung wie JButtons, d.h. sie Lösen einen ActionEvent aus. Das ActionCommand wird aus der Beschriftung entnommen, bzw. es kann mit der Methode setActionCommand gesetzt werden.

Separatoren in JMenus können mit der Methodepublic void addSeparator() eingefügt werden.

Page 45: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 45

BeispielJMenu test = new JMenu("BeispielMenü");test.add(new JMenuItem("einfacher MenuItem"));test.addSeparator();test.add(new JCheckBoxMenuItem("CheckBoxMenuItem 1"));test.add(new JCheckBoxMenuItem("CheckBoxMenuItem 2"));test.add(new JCheckBoxMenuItem("CheckBoxMenuItem 3"));test.addSeparator();ButtonGroup bg = new ButtonGroup();bg.add(new JRadioButtonMenuItem("RadioButtonMenuItem 1"));bg.add(new JRadioButtonMenuItem("RadioButtonMenuItem 2"));bg.add(new JRadioButtonMenuItem("RadioButtonMenuItem 3"));for (Enumeration e=bg.getElements();e.hasMoreElements();) test.add((JRadioButtonMenuItem)(e.nextElement()));test.addSeparator();JMenu unterMenue = new JMenu("UnterMenü"); JMenu unterUnterMenue = new JMenu("UnterUnterMenü"); unterUnterMenue.add(new JMenuItem("MenuItem 1")); ...unterMenue.add(unterUnterMenue);unterMenue.add(new JMenuItem("MenuItem 2"));...

Page 46: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 46

Look and Feel Das Look & Feel bestimmt das Aussehen und Verhalten der

Swingoberfläche. Das L&F kann zur Laufzeit des Systems geändert werden oder zu

Beginn festgelegt werden oder es wird das systemeigene L&F verwendet.

Es sind drei L&F implementiert: Windows Motif Java Metal

Es ist möglich eigene L&F zu implementieren. Zum Laden eines L&F dient die Methode

public static void setLookAndFeel (String className )

Page 47: DVG2 - 09 - Swing1 SWING. DVG2 - 09 - Swing2 ColorChooser Die Klasse JColorChooser bietet eine komfortable Möglichkeit, Farben auszuwählen. Konstruktor:

DVG2 - 09 - Swing 47

Die Klassen sind: Windows: com.sun.java.swing.plaf.windows.WindowsLookAndFeel

Motif: com.sun.java.swing.plaf.motif.MotifLookAndFeel

Metal: javax.swing.plaf.metal.MetalLookAndFeel Wenn das L&F zur Laufzeit geändert wird, muss es anschließend

aktiviert werden:UIManager.setLookAndFeel(L&F-KlassenName);SwingUtilities.updateComponentTreeUI(frame);frame.pack();

pack() muss nur aufgerufen werden, wenn sich die Größe der Komponenten durch das neue L&F verändert. Funktioniert nur für JFrames nicht für JApplets.