Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Swing je součást JFC Je to vylepšené GUI funkčně, esteticky i ergonomicky ( nazvaný náhodně větou: "Swing dancing is getting to be really big." - v San.

Podobné prezentace


Prezentace na téma: "Swing je součást JFC Je to vylepšené GUI funkčně, esteticky i ergonomicky ( nazvaný náhodně větou: "Swing dancing is getting to be really big." - v San."— Transkript prezentace:

1 Swing je součást JFC Je to vylepšené GUI funkčně, esteticky i ergonomicky ( nazvaný náhodně větou: "Swing dancing is getting to be really big." - v San Francisku. ). JFC ( Java Foundation Classes od v. 1.2 ) zahrnuje ještě 2D grafiku, lepší tisk, Accesibility a DnD ( Drag and Drop - ovládání gesty ). Swing nezávisí na platformě ( Windows, Motif ), umí dynamicky měnit vzhled komponent dle vkusu uživatele díky vlastnosti LookAndFeel ve stylu Windows, Motif anebo Metal. Na rozdíl od AWT využívá Swing lightweight komponenty, které vytváří Java a nikoli platforma. Swing staví komponenty na koncepci MVC ( Model – View – Control ), což usnadňuje modifikace a tvorbu dalších komponent. Pro zrychlení mnohé komponenty nejsou synchronizované. Využívá i starší třídy AWT ke konstrukci komponent – např.: Component / JComponent, Frame / JFrame, Applet / Japplet. Přidává řadu velmi důmyslných komponent – např.: JTable či JTree. PJV10

2 Swing API javax.accessibility
javax.swing – základní balíček, ( celkem má 18 balíčků ) .border – pro tvorbu okrajů komponent, .colorchooser – výběr barev, .event – rozšíření událostí, listenerů a adapterů .filechooser – výběr souborů, .plaf ( .basic .metal .multi .nimbus .synth ) – plug, look and feel, .table – tabulková struktura, .text ( .html .html.parser .rtf ) – pro texty různých typů, .tree – stromová struktura, .undo – podpora undo / redo. Swing částečně staví na balíčcích java.awt a java.awt.event. Komponenty jsou rozmanitější, elegantnější a strukturovanější, s vyšší funkcionalitou a usnadňují tvorbu dalších uživatelských komponent. Zavedení tipů a ikon zlepšuje srozumitelnost. Ikony mohou být obrázky(.gif, .jpeg, .png či vypočítané ) a to i animované. PJV10

3 AWT a Swing Container Window JWindow Frame JFrame Dialog JDialog
java.lang Object java.awt.image java.io AWT a Swing ImageObserver MenuContainer Serializable javax.swing java.awt Component AWT komponenty RootPane Container java.awt java.applet Container Panel Applet JApplet Window JWindow CellRenderer Pane Frame JFrame JComponent Dialog JDialog Layout=null javax.accessibilty Accessible FileDialog JInternal Frame J komponenty PJV10

4 JRootPane Každý kontejner implementující RootPaneContainer ( např. JFrame, JDialog, JWindow, JInternalFrame a JApplet ) má root pane. Root pane má tři další plochy (pane) a volitelně menu, které lze přidat k Frame nebo Appletu. Obvykle stačí pracovat jen s content pane, kam se vkládají komponenty. Pro rafinovanější GUI lze využít: vrstvení pomocí layered pane realizující hloubku ( tzv. Z-souřadnice ) zasklení pomocí předsazené glass pane. PJV10

5 Vrstvení pomocí LayeredPane
Dodává hloubku a defaultně nemá LayoutManager layer= FRAME_CONTENT_LAYER ContentPane a MenuBar 0 DEFAULT_LAYER - pro obvyklé komponenty PALETTE_LAYER - pro plovoucí toolbar a palety MODAL_LAYER - pro dialogy POPUP_LAYER - pro popups DRAG_LAYER - dočasně pro přesun Pro umístění slouží přetížené metody add( Component x, Object constrain, int pos ) kde constrain nutno zadat jako typ Integer PJV10

6 Vrstvení public class LayerTest extends JFrame {
Component x1=..., x2=..., x3=...; int layer1=..., layer2=..., layer3=...; int pos1=..., pos2=..., pos3=...; // udává hloubku -1, -2, ... public LayerTest( ) { JLayeredPane lp = new JLayeredPane( ); lp.add( x1, new Integer(layer1), pos1 ); lp.add( x2, new Integer(layer2), pos2 ); lp.add( x3, new Integer(layer3), pos3 ); this.getContentPane( ).add( lp ); this.setBounds( 100, 100, 500, 500 ); this.setVisible( true ); } .... PJV10

7 Zasklení pomocí glass pane
Glass pane je “sklo“ oddělující uživatele od vytvořeného GUI. Sklo má rozměry root pane a zakrývá i eventuální lištu pro menu, paspartu Frame však nikoli. Zasklení omezuje uživatelovy akce, naviguje ho či demonstruje možnosti. K tomu je třeba jeho akce zachytit listenery a případně je reinterpretovat. Na sklo lze i kreslit. Vložení do JFrame či JAppletu Component y = ... ; this.setGlassPane( y ); Component gp = this.getGlassPane( ); gp.setOpaque( false ); gp.setVisible( true ); // true – zasklít, false - odsklít PJV10

8 javax.swing.JComponent
je potomek třídy java.awt.Container a je předkem J komponent ( kromě JFrame, JDialog, JWindow, JApplet ) kterým zajišťuje: okraje ( border ) vyvětlivky ( tooltip ) vymalování ( custom painting ) – je rafinovanější L&F – v pozadí je ComponentUI dle výběru UIManageru vlastnosti požadované uživatelem podporu accessibility podporu DnD ( Drag and Drop ) - táhni a upusti double buffering – defaultně kreslí do skrytého bufru pro hladké animace key binding ( vazba na klávesy ) Většina komponent podporuje grafiku a obrázky. Samotná JComponent je vždy transparentní – ač definuje setOpaque(…), avšak opacita se realizuje až v potomcích. PJV10

9 JLabel a JToolTipText JLabel má mnohem významnější úlohu než java.awt.Label. Do JLabel lze vložit text i ikonu a nastavit jejich vzájemnou horizontální a vertikální polohu. Icon ic = new ImageIcon( "images/duke.gif" ); JLabel la = new JLabel( "This is Duke" , ic, SwingConstants.LEADING ); JLabel má pozadí defaultně transparentní, tj. opacity je false. To lze ovládat metodou setOpacity( boolean opacity ). JToolTipText je vysvětlivkou, kterou lze vybavit každou instanci třídy JComponent a to metodou: setToolTipText( String text ) instanci JTabbedPane pak metodou: setToolTipText( String text, int index ) PJV10

10 AbstractButton Koncept knoflíků a příbuzných součástek je nově strukturován. Strom třídy AbstractButton obsahuje (viz schémata): JButton, JToggleButton, JCheckBox, JRadioButton – spolupracuje s ButtonGroup, JMenuItem, JMenu, JCheckBoxMenuItem, JRadioButtonMenuItem. Tyto třídy mají i konstruktor s parametrem Action, který podporuje elegantní použití handleru. PJV10

11 Interfejs Action je extenze interfejsu java.awt.event.ActionListener.
void actionPerformed( ActionEvent ev ) - zděděná metoda void addPropertyChangeListener( PropertyChangeListener pcl ) void removePropertyChangeListener( PropertyChangeListener pcl ) Object getValue( String key ) void putValue( String key, Object value ) boolean isEnabled( ) setEnabled( boolean b ) PJV10

12 AbstractAction implements Action
metodu abstract actionPerformed však nekonretizuje. Je vhodným předkem pro tvorbu konkrétních handlerů. Přidává metody: PropertyChangeListener[ ] get PropertyChangeListeners( ) void firePropertyChange( String ptyName, Object oldVal, Object newVal ) Object[ ] getKeys( ) Akci lze spouštět i z několika komponent, mohou ukázat tentýž text a ikonu definovanou v handleru. Příkladmo: Action a = new Act1(); JButton b = new JButton(a); JMenuItem m = new JMenuItem(a); JTextField t = new JTextField(...); // no label and icon t.setAction(a); class Act1 extends AbstractAction { public Act1( ... ) { super( label, icon ); ... } public void actionPerformed( ActionEvent ev ) { ... } } PJV10

13 Metody paint a print Ve třídě JComponent jsou překryty a připsány metody pro kreslení a tisk. public void paint( Graphics g ) – defaultně volá tyto tři metody: public void paintComponent( Graphics g ) // tato komponenta public void paintBorder( Graphics g ) // její okraj public void paintChildren( Graphics g ) // vložené komponenty Kterákoliv z těchto čtyř metod může být přepsána. Metodu update( Graphics g ) Swing nevolá. Transparence vs. opacita komponent ovlivňuje efektivitu. V překrývající metodě je žádoucí nejprve volat super.paint( g ); Obdobně je řešen tisk metodami print ( Graphics g ) : printComponent, printBorder a printChildren. PJV10

14 Text Třída javax.text.JTextComponent zajišťuje služby pro své textové potomky: Model: document View: pro visualizaci Controller: editor kit Podpora undo/redo Caret, listenery a filtry Přímými potomky jsou třídy: JTextField JTextArea JEditorPane Pomocí tzv. stylů a atributů lze vytvořit pěkné texty. Navazují podbalíčky pro rtf a html. Lištu JMenuBar lze vložit do JFrame, JRootPane, JApplet, JDialog a JInternalFrame – nikoli však do JWindow. Lišta má být opacitní. PJV10

15 Řídící komponenty Buttons JComboBox JList JTextField JMenu JSlider
PJV10

16 Informační komponenty
editable JTextArea JTable JTree Colorchooser Filechooser not editable JLabel Progress bar Tool tip PJV10

17 Kontejnery Top-level JApplet JDialog JFrame JScrollPane JSplitPane
Tabbed pane Tool bar JPanel PJV10

18 Speciální kontejnery Internal frame Layered pane Root pane PJV10

19 J komponenty JLabel JButton JTextArea JMenu JMenuBar JTextField
javax.accessibilty JComponent Accessible J komponenty JLabel javax.swing.text Abstract Button JButton JText Component ListCell Renderer JToggle Button JCheckBox JEditor Pane DefaultList CellRenderer JText Pane JRadio Button BasicCombo BoxRenderer JMenuItem JTextArea MenuElement TableCell Renderer JMenu JMenuBar DefaultTable CellRenderer JTextField JCheckBox MenuItem JPopup Menu JFormatted TextField TreeCellRenderer JRadioButton MenuItem DefaultTree CellRenderer JPassword Field PJV10

20 J komponenty JPanel JList JScrollBar JSlider Box JTree JTable JToolBar
javax.accessibilty JComponent Accessible J komponenty JPanel JList JScrollBar JSlider JColor Chooser Box JCombo Box JProgress Bar JSeparator JFile Chooser BoxLayout javax.swing.table JTree JTable JTable Header JToolBar JToolTip JSpinner JViewPort JSplit Pane JOption Pane JScroll Pane JRoot Pane JTabbed Pane JLayered Pane JDesktop Pane Layout=null PJV10

21 javax.swing InputMap ButtonModel ListModel SpinnerModel Abstract
java.awt.event ButtonModel ListModel SpinnerModel ActionListener <E> Default ButtonModel Abstract ListModel Abstract SpinnerModel Action ComboBoxModel <E> <E> Abstract Action Spinner DateModel DefaultCombo BoxModel MutableCombo BoxModel <E> javax.swing.text <E> Spinner ListModel Text Action Default ListModel <E> Spinner NumberModel ButtonGroup DefaultList SelectionModel InputMap DefaultSingle SelectionModel ActionMap BoundedRangeModel Border Factory Component InputMap DefaultBounded RangeModel Input Verifier PJV10

22 javax.swing Popup Timer Graphics RGBImage Filter FilterInput Stream
java.awt java.awt.image java.io java.awt.event Graphics RGBImage Filter FilterInput Stream Mouse Adapter Focus TraversalPolicy 5 Debug Graphics GrayFilter ProgressMonitor InputStream ToolTip Manager InternalFrame Focus TraversalPolicy javax.accessibilty AWTKeyStroke SortingFocus TraversalPolicy Icon Accessible DesktopManager ImageIcon DefaultDesktop Manager KeyStroke LayoutFocus TraversalPolicy java.util Hashtable Progress Monitor UI Defaults LookAndFeel Repaint Manager Popup Timer Size Requirements UI Manager Swing Utilities MenuSelection Manager Popup Factory Transfer Handler Size Sequence PJV10

23 SingleSelectionModel
javax.swing java.awt SwingConstants LayoutManager java.lang java.util.concurrent java.awt Runnable Future WindowConstants LayoutManager2 <V> java.util.concurrent ViewPort Layout ScrollPaneConstants RunnableFuture 1.6 <V> Scrollable ScrollPane Layout Swing Worker Renderer 1.6 <T,V> Box Layout SingleSelectionModel Overlay Layout CellEditor Spring Layout Spring 1.4 TableCellEditor TreeCellEditor Group Layout Abstract CellEditor DefaultCell Editor 1.6 PJV10

24 javax.swing.event EventListener List EventListener PJV10 java.util
DocumentEvent EventListener AncestorListener PopupMenuListener TableColumn ModelListener TreeModelListener CaretListener MenuDragMouseListener TableModelListener TreeWillExpandListener CellEditorListener MenuKeyListener TreeExpansionListener UndoableEditListener ChangeListener MenuListener TreeSelectionListener java.awt.event java.awt.event DocumentListener RowSorterListener MouseListener MouseMotionListener 1.6 5 2 HyperLinkListener InternaFrameListener 7 MouseInputListener ListDataListener InternalFrame Adapter 7 MouseInput Adapter ListSelectionListener PJV10

25 javax.swing.event AWTEvent Serializable EventObject Component Event
java.util EventObject java.awt java.awt.event java.awt.event java.awt.event java.awt.event AWTEvent Component Event Input Event MouseEvent MouseWheel Event InternalFrame Event Ancestor Event MenuDrag MouseEvent ListData Event ListSelection Event Menu Event PopupMenu Event java.beans TableColumn ModelEvent Table ModelEvent TableExpansion Event Hyperlink Event Property ChangeSupport Tree ModelEvent TreeSelection Event Undoable EditEvent CaretEvent SwingProperty ChangeSupport PJV10

26 javax.swing.border Abstract Border Border
3 Třída JComponent umí vykreslit okolo komponenty různé okraje, což zlepšuje přehlednost a srozumitelnost. Abstract Border Serializable Bevel Border SoftBevel Border Compound Border Empty Border Matte Border Etched Border Line Border Titled Border PJV10

27 Demo: javax.swing.ProgressBar
JProgressBar pb1 = new JProgressBar( orient, min, max ); pb1.setStringPainted( true ); // procenta na proužku pb1.setModel( new Mod( ) ); class Mod extends DefaultBoundedRangeModel implements Runnable { public Mod( ) { new Thread( this ).start( ); } public void run( ) { try { for ( int i = 0; i <= 100; Thread.sleep( 200 ), this.setValue( i = i+5 ) ) ; } catch ( InterruptedException ex ) { } } PJV10

28 javax.swing.table JTableHeader JComponent TableModel CellEditor
TableColumnModel Abstract TableModel DefaultTable ColumnModel TableCellEditor JLabel TableColumn Model Listener DefaultTable Model DefaultCell Editor EventListener DefaultTable CellRenderer PropertyChange Listener TableCellRenderer RowSorter ListSection Listener <M> Default RowSorter Table Column <M,I> Table RowSorter TableString Converter <M> PJV10

29 javax.swing.table (1/2) public class TableTest extends Jframe implements TableModelListener { Object data [ ][ ] = new Object [4] [3] ; // fill String or Integer … String [ ] names = { "AAA", "BBB", "CCC", }; // column names TableModel tm = new DefaultTableModel( data, names ); JTable ta = new JTable( ); public TableTest() { ta.setModel( tm ); tm.addTableModelListener(this); JScrollPane sp = new JScrollPane( ); sp.setViewportView( ta ); Container co = this.getContentPane( ); co.add( sp ); } PJV10

30 javax.swing.table (2/2) public void tableChanged(TableModelEvent e) {
TableModel m = (TableModel)e.getSource(); int col = e.getColumn(); int row = e.getFirstRow(); Object x = m.getValueAt( row, col ); // get something m.removeTableModelListener(this); // disable event acceptance m.setValueAt( z, i, j ); // store something m.addTableModelListener(this); ); // enable event acceptance } PJV10

31 javax.swing.tree TreeNode TreeModel TreePath DefaultTree Model
TreeSelectionModel TreePath DefaultTree Model MutableTreeNode DefaultTree SelectionModel DefaultTree MutableModel RowMapper Abstract LayoutCache JLabel FixedHeight LayoutCache TreeCellEditor DefaultTree CellEditor DefaultTree CellRenderer VariableHeight LayoutCache TreeCellRenderer PJV10

32 javax.swing.text View Composite View Box View Component View Form View
Block View List View AsyncBox View Object View Flow View Paragraph View Glyph View Label View Table View Zone View Icon View TabableView Image View Wrapped PlainView TabExpander Plain View Field View Password View PJV10

33 javax.swing.text (part)
Document StyledDocument EditorKit Abstract Document DefaultStyled Document Document Filter Default EditorKit Plain Document HTML Document StyleContext Styled EditorKit Segment StyleSheet HTML EditorKit Element Position Caret RTF EditorKit DefaultCaret AttributeSet Style MutableAttributeSet Highlighter Simple AttributeSet Layered Highlighter Utilities PJV10


Stáhnout ppt "Swing je součást JFC Je to vylepšené GUI funkčně, esteticky i ergonomicky ( nazvaný náhodně větou: "Swing dancing is getting to be really big." - v San."

Podobné prezentace


Reklamy Google