You are on page 1of 11

Swing

(A javax.swing csomag)

SWING komponensek
Motivci: az AWT htrnyai: a toolkit-ek komplexitsa (bug-ok forrsa volt, srti a platformfggetlensget), kevs lehetsg a megjelents befolysolsra, specilis megjelents komponensek ltrehozsra (a megjelents a platformnak megfelel), stb. JavaSoft megolds: SWING: 100%-ban Java-ban megrt grafikus komponensek

Tartalom panel
JFrame: a Frame kiterjesztse NEM adhatunk hozz direkt mdon komponenseket Tartozik hozz egy Content Panel (Container tpus), ehhez adjuk hozz a komponenseinket:
Container contentPane = this.getContentPane(); contentPane.setLayout( new FlowLayout()); contentPane.add(button1); contentPane.add(button2); contentPane.add(panel); Vagy: JPanel panel = new JPanel(); panel.setLayout( new FlowLayout()); panel.add(textField); panel.add(list); this.setContentPane(panel);

Look and feel


A komponensek megjelentse mr nem platformfgg, az UIManager osztly segtsgvel befolysolhatjuk a felsznnk grafikus megjelentst, klnbz look and feel osztlyokat rendelhetnk hozz: try { UIManager.setLookAndFeel( "javax.swing.plaf.metal.MetalLookAndFeel"); } catch (Exception e) { System.err.println("Couldn't use the metal look and feel: " + e); }

SWING komponensek (nhny plda)


JLabel: az awt.Label SWING-es megfelelje, ikont is rendelhetnk hozz, lehetv teszi a tartalom pozicionlst. Megjegyzs: a SWING cmkk esetben html formzs is alkalmazhat JButton: az awt.Button SWING-es megfelelje, ikon rendelhet hozz JTextComponent:
Hasznos metdusok: copy(), cut(), paste(), getSelectedText(), setSelectionStart(), setSelectionEnd(), selectAll(), replaceSelection(), getText(), setText(), setEditable(), setCaretPosition() Szrmaztatott osztlyok: JTextField, JTextArea, JTextPane. Tovbb a JTextField leszrmazottja: JPasswordField (kdok beolvassra)

JScrollBar: az awt.ScrollBar SWING-es megfelelje JSlider: a JScrollBar-hoz hasonl, plusz funkcikkal JProgressBar: folyamatok, mveletsorok llapotnak monitorizlsra JComboBox: az awt.Choice komponenshez hasonl, lehetv teszi egy szerkeszthet mez hozzadst JList: az awt.List megfelelje Ms eszkzk (nem grafikus komponensek): pl. Timer (bizonyos idintervallum eltelte utn ActionEvent-et genrl), stb. Stb., stb., lsd pl. http://java.sun.com/developer/onlineTraining/GUI/Swing1/shortcourse.html

Az Icon interfsz
public interface Icon{ void paintIcon( Component c, Graphics g, int x, int y ); int getIconWidth(); int getIconHeight(); } Hasznlata: public class RedOval implements Icon { public void paintIcon (Component c, Graphics g, int x, int y) { g.setColor(Color.red); g.drawOval (x, y, getIconWidth(), getIconHeight()); } public int getIconWidth() { return 10; } public int getIconHeight() { return 10; } } Vagy: Icon iconPicture = new ImageIcon("Apple.gif");

Plda - JLabel
import javax.swing.*; import java.awt.*; public class SwingPanel extends JPanel{ public SwingPanel() { setLayout( new GridLayout( 3, 1 )); JLabel simplelabel = new JLabel("This is a simple label"); add( simplelabel ); JLabel iconlabel = new JLabel("This is a fancy label"); Icon icon = new ImageIcon("icon.gif"); iconlabel.setIcon( icon ); Font font = new Font("Serif",Font.BOLD|Font.ITALIC,30); iconlabel.setFont( font ); add( iconlabel ); JLabel myiconlabel = new JLabel("This is my icon label"); Icon myicon = new RedOval(); myiconlabel.setIcon( myicon ); add( myiconlabel ); } }

Plda - JLabel

import javax.swing.JFrame; public class SwingFrame extends JFrame{ private SwingPanel p; public SwingFrame() { p = new SwingPanel(); getContentPane().add( p ); } public static void main( String args[] ) { SwingFrame f = new SwingFrame(); f.addWindowListener( new java.awt.event.WindowAdapter(){ public void windowClosing( java.awt.event.WindowEvent e){ System.exit( 0 ); } }); f.setBounds(1,1,400,300); f.setVisible( true ); } }

Nehzsly s pehelysly komponensek


Az AWT heavyweight komponenseket hasznl (mindeniknek megfelel egy natv peer), a SWING lightweight komponenseket (nincs natv prjuk) A Swing komponensek egy natv kontneren bell lesznek megjelentve, az AWT komponensek mindegyiknek megfelel egy natv ablak Zordering problmk (a SWING komponensek rklik az ket tartalmaz trol szintjt, gy az AWT komponensek elfedik ket) egy alkalmazson (troln) bell nem javasolt a klnbz tpus komponensek keverse (megjegyzs: vonatkoz Java SE 6 javtsok) A lightweight komponensek tartalmazhatnak tltsz rszeket (a fellet nem lesz felttlenl kitltve httrszn pixelekkel a komponensek nem felttlenl tglalap alakak, az egrmveletek tovbbtdhatnak az ket tartalmaz trolkhoz)

Paint: AWT vs. SWING


AWT: A (natv) rendszer ltal kivltott (system triggered) frissts: mikor elszr jelenik meg a komponens, mikor jramretezdik, mikor srl s frissteni kell paint metdus meghvsa (a teljes rintett fellet jrarajzoldik) Az alkalmazs ltal kivltott (application triggered) frissts: az alkalmazs kri a komponens frisstst (valamilyen llapotvltozs kvetkezmnyeknt) a repaint metdus meghvsa az update, majd a paint meghvst eredmnyezi (az update alap implementcija trli a komponens fellett, de jradefinilhat incremental painting) SWING: A Containerek frisstse elszr sajt felletk, majd az ltaluk tartalmazott komponensek felletnek frisstst eredmnyezi a paint metdus jradefinilsnl fontos a super.paint() metdushvs alkalmazsa (ellenkez esetben a tartalmazott komponensek nem jelennek meg, mivel a Container.update() alap implementcija nem biztost rekurzv update s paint metdushvsokat a tartalmazott komponensekre) A system triggered frisstst nem csak a natv rendszer (els megjelens), hanem a lightweight framework is kivlthatja (ksbbi frissts), s ez repaint metdushvson keresztl trtnik a SWING esetben nincsen igazi klnbsg az update/paint kztt

Paint: SWING
Double buffering tmogats: offscreen buffer hozzrendelse a trolkhoz public boolean isDoubleBuffered() alaprtelmezetten true Transparency s overlapping: a komponensek felletn nincs minden pixel kirajzolva, s a komponensek rszlegesen fedhetik egymst a frisstsnl a komponens alatti, illetve az egymst fed rszeket is frissteni kell (a hierarchia bejrsa) A frissts optimalizlsra: public boolean isOptimizedDrawingEnabled() true, ha a komponens biztostja, hogy nem tartalmaz egymst fed komponenseket (nincs szksg a hierarchia bejrsra) Opacity: - public boolean isOpaque() True a komponensnek megfelel tglalap alak fellet minden pixele meg lesz jelentve (a legtbb esetben) False a komponens nem garantlja minden pixel megjelentst Nem tltszsgot jelent, tulajdonkppen csak egy szerzds a grafikus frisstst vgz rendszerrel, de a komponensek maguk kell biztostsk a megfelel implementcit Paint metdusok: protected void paintComponent(Graphics g) protected void paintBorder(Graphics g) protected void paintChildren(Graphics g) ltalban csak a paintComponent metdust akarjuk jradefinilni (s akkor csak ezt tegyk!)

You might also like