Professional Documents
Culture Documents
Swing
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);
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 ); } }
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!)