|
|
1. sor: |
1. sor: |
| __TOC__
| | #ÁTIRÁNYÍTÁS [[2._Java_ablakkezelés,_Swing_összefoglaló_(2012)]] |
| | |
| ==AWT (Abstract Window Toolkit)==
| |
| | |
| * natív kinézetű, natív implementációjú megjelenítő könyvtár
| |
| | |
| ===Container===
| |
| | |
| * konténer elemek: Panel, ScrollPane, Window, Frame, stb.
| |
| * komponensek megtalálása: pozíció, sorszám, listázás
| |
| * fókusz továbbadása
| |
| * elhelyezés: LayoutManager (Strategy pattern!)
| |
| | |
| ==Eseménykezelés==
| |
| | |
| * public boolean handleEvent, mouseDown, keyDown, action(Event e, ...)
| |
| * eseményre meghívja az fenti függvényeket (Observer pattern!)
| |
| * ha a visszatérés false, az esemény feljebb gyűrűzik
| |
| | |
| ===xxxEventListener, xxxEventAdapter===
| |
| | |
| * xxxEventListener - minden függvényt tartalmazó interfész
| |
| * xxxEventAdapter - xxxEventListener megvalósítása üres metódusokkal
| |
| | |
| ==Fókusz-kezelés==
| |
| | |
| * azé a billentyűzet-input, akinél a fókusz van
| |
| | |
| ===KeyEventDispatcher interfész===
| |
| | |
| * az implementáló osztály a focus owner előtt elkaphatja az eseményt
| |
| * boolean dispatchKeyEvent(KeyEvent e) // továbbadódjon-e
| |
| * KeyboardFocusManager-nél kell regisztrálni
| |
| | |
| ===KeyEventPostProcessor interfész===
| |
| | |
| * az implementáló osztály a focus owner után elkaphatja az eseményt
| |
| * boolean postProcessKeyEvent(KeyEvent e) // továbbadódjon-e
| |
| * KeyboardFocusManager-nél kell regisztrálni
| |
| | |
| ===WindowEvent, FocusEvent===
| |
| | |
| * fókusz elvesztés/elnyerés sorrendje:
| |
| | |
| <pre>
| |
| Frame F2-ben K2 komponensre kattintunk
| |
| K1: FOCUS_LOST // K1 Component elveszti
| |
| F1: WINDOW_LOST_FOCUS // F1 Frame elveszti
| |
| F1: WINDOW_DEACTIVATED // F1 Window elveszti
| |
| F2: WINDOW_ACTIVATED // F2 Window elnyeri
| |
| F2: WINDOW_GAINED_FOCUS // F2 Frame elnyeri
| |
| K2: FOCUS_GAINED // K2 Component elnyeri
| |
| </pre>
| |
| * lehetséges a fókusz ideiglenes elkérése (scrollbar)
| |
| | |
| ===Fókusz továbbadás===
| |
| | |
| * fókuszváltó billentyűk újrakonfigurálása:
| |
| ** !setFocusTraversalKeys(int id, Set< extends AWTKeyStroke> keystrokes)
| |
| ** KeyboardFocusManager.XXX_TRAVERSAL_KEYS: FORWARD, BACKWARD, UP_CYCLE
| |
| * FocusTraversalPolicy - fókusz továbbadási sorrend definiálása
| |
| * Programozott továbbadás
| |
| ** KeyboardFocusManager: focusNextComponent(Component) // up, down, next, previous
| |
| ** Component: transferFocus() // up, down, back
| |
| ** requestFocusInWindow()
| |
| | |
| ==Layout managerek==
| |
| | |
| * az ő feladatuk a Containerben lévő elemek elhelyezése
| |
| | |
| ===Container===
| |
| | |
| * setLayout()/getLayout() - layout manager beállítása
| |
| * validate() - tartalmazott elemek pozíciójának frissítése
| |
| * add() - új elem hozzáadása (adott pozícióra)
| |
| | |
| ===LayoutManager===
| |
| | |
| * void layoutContainer(Container parent) - Container layoutjának beállítása
| |
| * void addLayoutComponent(String name, Component comp) - új elem hozzáadása
| |
| * Dimension maximum/preferred/minimumLayoutSize(Container parent) - méretbeállítás
| |
| * float getLayoutAlignmentX/Y(Container target) - X/Y irányú igazítás
| |
| * void invalidateLayout(Container target) - elrendezés érvénytelenítése
| |
| | |
| ===BorderLayout===
| |
| | |
| * NORTH, SOUTH, EAST, WEST és CENTER elhelyezés
| |
| [[Fájl:borderlayout.png]]
| |
| | |
| ===FlowLayout===
| |
| | |
| * sorban egymás mellé
| |
| * LEFT, RIGHT, CENTER, LEADING, TRAILING orientációval
| |
| [[Fájl:flowlayout.png]]
| |
| | |
| ===CardLayout===
| |
| | |
| * mindig csak a legfelső látszik, lapozhatunk közöttük
| |
| | |
| ===GridLayout===
| |
| | |
| * táblázatos, sorok/oszlopok száma rögzíthető
| |
| [[Fájl:gridlayout.png]]
| |
| | |
| ===GridBagLayout===
| |
| | |
| * táblázat összevont cellákkal
| |
| * GridBagConstraint segít az elrendezésben (gridx/y, gridwidth/height, weightx/y, ipadx/y, insets, fill, anchor)
| |
| | |
| [[Fájl:gridbaglayout.png]]
| |
| | |
| ===BoxLayout (Swing)===
| |
| | |
| * kb. FlowLayout, csak nem tör a sor végén hanem nyújt
| |
| [[Fájl:boxlayout.png]]
| |
| | |
| ===SpringLayout (Swing)===
| |
| | |
| * rugalmas táblázat, formok egyszerű megjelenítésére
| |
| [[Fájl:springlayout.png]]
| |
| | |
| ===GroupLayout (Swing)===
| |
| * egymásba ágyazott csoportok, soros/párhuzamos elhelyezésben
| |
| [[Fájl:grouplayout.png]]
| |
| | |
| ==Swing==
| |
| | |
| * Java-ban megírt, platformfüggetlen
| |
| * MVC architektúrát használ
| |
| * egyszerű komponensek: +J betű
| |
| * AWT-hez hasonló eseménykezelés
| |
| | |
| ===JList===
| |
| | |
| * nem méretezhető: JScrollPane-be kell tenni (Decorator pattern!)
| |
| * elemeket adó modell lehet: ListModel, Vector, Object[]
| |
| | |
| ====ListModel interfész====
| |
| | |
| * Object getElementAt(int index)
| |
| * int getSize()
| |
| * void add/removeListDataListener(ListDataListener l)
| |
| * implementáció pl. DefaultListModel (add/get/remove)
| |
| | |
| ====ListDataListener ====
| |
| | |
| * modell változásakor meghívott eseménykezelő
| |
| * void intervalAdded/Removed(ListDataEvent e)
| |
| * void contentsChanged(ListDataEvent e)
| |
| | |
| ===JTable===
| |
| | |
| * modellje: TableModel
| |
| * görgetéshez JScrollPane kell
| |
| | |
| ====TableModel====
| |
| | |
| * változásakor eseményt küld a TableModelListener-eknek
| |
| * boolean isCellEditable(int r, int c)
| |
| * String getColumnName(int col)
| |
| * void get/setValueAt(Object aValue, int rowIndex, int columnIndex)
| |
| * int getRow/ColumnCount()
| |
| | |
| ===JTree===
| |
| | |
| * modellje: BinTreeModel
| |
| | |
| ====BinTreeModel====
| |
| | |
| * változásakor eseményt küld a TreeModelListener-eknek
| |
| * public Object getChild(Object parent, int index)
| |
| * public Object getRoot()
| |
| * public boolean isLeaf(Object node)
| |
| * public void insert(double d)
| |
| | |
| ==Drag and Drop==
| |
| | |
| * JComponent.setDragEnabled(boolean b)
| |
| * setDropMode(DropMode dm) - elemek közé/elemre/stb. dobja
| |
| | |
| ===DataFlavor===
| |
| | |
| * adatformátumokat tárol, ami megjelenhet a drag and drop-ban (és a vágólap és fájrendszerben)
| |
| * DataFlavor(Class representationClass, String humanPresentableName)
| |
| | |
| ===Transferable===
| |
| | |
| * interfész adatok átvitelére
| |
| * Object getTransferData(DataFlavor flavor)
| |
| * DataFlavor[] getTransferDataFlavors()
| |
| * boolean isDataFlavorSupported(DataFlavor flavor)
| |
| | |
| ===TransferHandler===
| |
| | |
| * segítségével testre szabhatjuk a komponens drag&drop viselkedését
| |
| * JComponent.setTransferHandler(TransferHandler th)
| |
| * int getSourceActions(JComponent): COPY, MOVE, LINK
| |
| * Transferable createTransferable(JComponent)
| |
| * void exportDone(JComponent c, Transferable t, int action)
| |
| * boolean canImport(TransferHandler.TransferSupport ts)
| |
| * boolean importData(TransferHandler.TransferSupport ts)
| |
| | |
| ===TransferSupport===
| |
| | |
| * segít Drag and Drop lebonyolításában: résztvevő komponensek, adat, stb. tárolása
| |
| * Component getComponent()
| |
| * int getDropAction()
| |
| * int getSourceDropActions()
| |
| * DataFlavor[] getDataFlavors()
| |
| * boolean isDataFlavorSupported(DataFlavor)
| |
| * Transferable getTransferable()
| |
| * DropLocation getDropLocation()
| |
| | |
| ==Szálkezelés==
| |
| | |
| * a Swing nem szálbiztos
| |
| * alapból egy szálon fut az eseménykezelés és megjelenítés
| |
| * SwingUtilities.invokeLater(Runnable r) vagy .invokeAndWait(Runnable r) különszálas GUI építésre
| |
| | |
| ===SwingWorker===
| |
| | |
| * új szálként ''viselkedik'', hosszabb számítások esetén hasznos
| |
| * visszatérési értéke van
| |
| * protected abstract T doInBackground() - elvégzendő munka implementálása
| |
| * void execute() - szál indítása
| |
| * protected void done() - befejezéskor meghívódik
| |
| * T get(long timeout, TimeUnit unit) - visszatérési érték lekérdezése
| |
| * void setProgress(int i) - munka állása százalékban
| |
| * void cancel(boolean mayInterruptIfRunning) - futás megszakítása
| |
| * protected final void publish(V... chunks) - köztes futási eredményeket küld az eseménykezelő szálnak
| |
| * protected void process(List<V> chunks) - átveszi a köztes eredményeket
| |
| * public final SwingWorker.StateValue getState():
| |
| ** PENDING -> indítás előtt
| |
| ** STARTED -> fut, de még nem állt le
| |
| ** DONE -> megállt
| |
| | |
| ==Beágyazott==
| |
| | |
| * kevés erőforrás, kicsi memória és CPU
| |
| * folyamatos VM futás, nem ragadhatnak be objektumok a memóriába
| |
| * listener eseménykezelő nem nyerő, Whiteboard kell (l. [[OotTervezesiMintak|tervezési minták]])
| |
| | |
| -- [[MeszegetoBalazsIstvan|MeszegetoBalazsIstvan]] - 2008.05.27. <br />
| |
| -- [[PallosTamas|Velias]] - 2009.05.27.
| |
| --[[Szerkesztő:Ferrero|Szabó Csaba]] ([[Szerkesztővita:Ferrero|vita]]) 2012. december 16., 14:18 (CET)
| |
| | |
| [[Category:Infoszak]]
| |