1 / 41

SWING

SWING. 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.

Download Presentation

SWING

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SWING DVG2 - 10 - 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. DVG2 - 10 - Swing

  3. Beispiel 7 public Container makeContentPane() { JPanel pane = new JPanel(); Color c = JColorChooser.showDialog(pane, "Hintergrundfarbe festlegen", pane.getBackground()); pane.setBackground(c); c = JColorChooser.showDialog(pane, "Vordergrundfarbe festlegen", pane.getForeground()); JLabel l = new JLabel("Das sind die neuen Farben"); l.setFont(new Font("Arial", Font.BOLD, 40)); l.setForeground(c); pane.add(l); return pane; } DVG2 - 10 - 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. DVG2 - 10 - 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 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 DVG2 - 10 - Swing

  6. Abfragen der ausgewählten Dateien • Mit den Methodenpublic 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() DVG2 - 10 - Swing

  7. Beispiel 8 public class B8 extends JApplet implements ActionListener { ... JLabel la; File startDir = null; public Container makeContentPane() { JPanel pane = new JPanel(); pane.setLayout(new FlowLayout()); JButton jb = new JButton("Open File"); jb.addActionListener(this); pane.add(jb); la = new JLabel("Es ist kein File ausgewählt"); pane.add(la); return pane; } DVG2 - 10 - 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()); } } DVG2 - 10 - 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 Methodenpublic 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). DVG2 - 10 - 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)“ DVG2 - 10 - Swing

  11. Beispiel import 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)"; } } DVG2 - 10 - 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. DVG2 - 10 - Swing

  13. Beispiel public 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; } } DVG2 - 10 - 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. DVG2 - 10 - Swing

  15. Beispiel public 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; } DVG2 - 10 - Swing

  16. Beispiel public 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); } } } DVG2 - 10 - 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 Methodenpublic 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 DVG2 - 10 - Swing

  18. Beispiel 9 private Container makeContentPane() { 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"); JPanel panel = new JPanel(); panel.add(pane); return panel; } DVG2 - 10 - 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. DVG2 - 10 - 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) DVG2 - 10 - Swing

  21. Einfache Tabelle private 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); } DVG2 - 10 - 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) DVG2 - 10 - Swing

  23. Beispiel JTable1 private 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); } }; DVG2 - 10 - 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); } DVG2 - 10 - Swing

  25. Zellrenderer • Jede Zelle wird bei der Darstellung durch einen Zellrenderer bearbeitet. Welcher Zellrenderer verwendet wird hängt vom Typ, d.h. von der Klasse des Objektes ab. Diese wird mit der Methode getColumnClass abgefragt. Zellen in einer Spalte werden also immer gleich gerendert. Folgende Standardrenderer sind im System enthalten: • Boolean : als CheckBox • Number : als rechtsbündiges Label • ImageIcon : als zentriertes Bild • Andere Objekte : als linksbündige Zeichenkette des Objektes • Eigene Renderer können hinzugefügt werden.public void setDefaultRenderer(Class columnClass, TableCellRenderer renderer)columnClass : Klasse für die Renderer zuständig istrenderer : Renderer, der für diese Klasse verwendet werden sollpublic void setCellRenderer(TableCellRenderer cellRenderer)um den Renderer eines TableColumn-Objektes zu setzen DVG2 - 10 - Swing

  26. Zelleditoren • Zelleditoren werden ähnlich wie die Renderer angewendet. Sie dienen der Eingabe eines Wertes in einer Zelle. • Sie können ebenfall Spalten- oder Klassenabhängig definiert werden. • Für spezielle Zelleditoren gibt es die Klasse DefaultCellEditor mit den Konstruktoren:public DefaultCellEditor(JTextField textField)public DefaultCellEditor(JCheckBox checkBox)public DefaultCellEditor(JComboBox comboBox) DVG2 - 10 - Swing

  27. Beispiel JTableEditor JComboBox 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)); DVG2 - 10 - Swing

  28. 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 Methodepublic 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. DVG2 - 10 - Swing

  29. 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 DVG2 - 10 - Swing

  30. Von LayoutManager2 abgeleitete Layouts • CardLayout • organisiert mehrere Seiten wie Karteikarten • Spezielle Methoden erlauben das Blättern und Positionieren • Besser mit JTabbedPane realisieren • GridBagLayout • Verallgemeinertes Tabellen-Layout • Zusammenfassung von Zellen • Steuerung der Höhen und Breiten DVG2 - 10 - Swing • BorderLayout • Randkomponenten um eine zentrale Komponente platziert

  31. BoxLayout • Die Komponenten werden nebeneinander oder übereinander angeordnet. DVG2 - 10 - Swing

  32. Kombination von Layouts BorderLayout GridLayout GridBagLayout • Zur Beschreibung komplizierterer Layouts können diese kombiniert werden. • Statt einer Komponente wird ein Container platziert. Dieser Container erhält ein eigenes Layout. DVG2 - 10 - Swing

  33. 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 DVG2 - 10 - Swing

  34. Beispiel toolBar.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; } DVG2 - 10 - Swing

  35. 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); } DVG2 - 10 - Swing

  36. 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. DVG2 - 10 - Swing

  37. 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 DVG2 - 10 - Swing

  38. 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. DVG2 - 10 - Swing

  39. Beispiel JMenu 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")); ... DVG2 - 10 - Swing

  40. 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 Methodepublic static void setLookAndFeel (String className ) • 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 DVG2 - 10 - Swing

  41. Wenn das L&F zur Laufzeit 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. DVG2 - 10 - Swing

More Related