<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=5._Ablakkezel%C3%A9s</id>
	<title>5. Ablakkezelés - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=5._Ablakkezel%C3%A9s"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=5._Ablakkezel%C3%A9s&amp;action=history"/>
	<updated>2026-05-15T05:45:36Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=5._Ablakkezel%C3%A9s&amp;diff=150230&amp;oldid=prev</id>
		<title>Ferrero, 2013. január 7., 23:16-n</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=5._Ablakkezel%C3%A9s&amp;diff=150230&amp;oldid=prev"/>
		<updated>2013-01-07T23:16:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;hu&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Régebbi változat&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;A lap 2013. január 8., 01:16-kori változata&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;1. sor:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;1. sor:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{GlobalTemplate|Infoszak|OotAblakkezeles}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__TOC__&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__TOC__&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ferrero</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=5._Ablakkezel%C3%A9s&amp;diff=139579&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoszak|OotAblakkezeles}}   __TOC__  ==5.1. AWT (Abstract Window Toolkit)==  * natív kinézetű, natív implementációjú megjelenítő könyvtár  …”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=5._Ablakkezel%C3%A9s&amp;diff=139579&amp;oldid=prev"/>
		<updated>2012-10-21T20:43:39Z</updated>

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