Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
495,07 KB
Nội dung
Trang 120 Chng 6: LP TRÌNH HO AWT Mt kh nng ca Java là cho phép ta xây dng các ng dng có giao din ho hay còn gi là GUI (Grapthical User Interface). Khi Java c phát hành, các thành phn hoc tp trung vào th vin mang tên Abstract Window Toolkit (AWT). i vi i h nn, thành phn AWT sc ánh x sang mt thành phn nn c th, bng cách s ng trc tip mã native ca h nn, chính vì vy nó ph thuc rt nhiu vào h nn và nó còn gây li trên mt s h nn. Vi bn phát hành Java 2, các thành phn giao din c thay bng tp hp các thành phn linh hot, a nng, mnh m, c lp vi h nn thuc th vin Swing. Phn ln các thành phn trong th vin Swing u c tô v trc tip trên canvas bng mã lnh ca Java, ngoi tr các thành phn là lp con ca lp java.awt.Window hoc Java.awt.Panel vn phi c v bng GUI trên nn c th. Thành phn Swing ít ph thuc vào h nn hn do vy ít gp li hn và c bit nó s dng ít tài nguyên ca h thng hn các thành phn trong th vin awt. Mc dù các thành phn awt n c h tr trong Java 2 nhng, tuy nhiên Sun khuyên bn nên s dng các thành phn Swing thay cho các thành phn awt, tuy nhiên các thành phn trong th vin Swing không th thay tt c các thành phn trong th vin awt. Chúng ch thay th mt phn ca awt nh: Button, Panel, TextFeild, v.v. Còn các lp tr giúp khác trong awt nh : Graphics, Color, Font, FontMetrics, v.v. vn không thay i. Bên cnh ó các thành phn Swing còn dng mô hình s lý s kin ca awt. I. Gii thiu v h thng ho ca Java 1. Gii thiu chung Thit k API cho lp trình ho ca Java là mt ví d hoàn ho v cách dùng lp, s tha và giao din. API cho lp trình ho bao gm mt tp rt nhiu lp nhm tr giúp xây dng các thành phn giao din khác nhau nh: ca s,nút n, ô vn bn, menu, hp kim, v.v. Mi quan h k tha gia các thành phn này c mô t trong hình sau: Componient ây là lp (tru tng) cha ca mi lp giao din ngi dùng. Lp này cung cp các thuc tính, hành vi c bn nht ca tt c các thành phn giao din. Container Là mt vt cha dùng ghép nhóm các thành phn giao din khác. Mi t cha có mt lp qun lý hin th, lp qun lý hin th có trách nhim b trí cách thc hin th các thành phn bên trong. Hai vt cha hay c s dng nht la JFrame và JPanel. Jcomponient Là lp cha ca mi thành phn Swing ligth weight, c v trc tip lên canvas bng mã lnh Java. Window c s dng to ra mt ca s, Thông thng ta hay s dng hai lp con ca nó là JFrame và JDialog. JFrame là ca s không lng bên trong ca s khác. JDialog là mt ca sc hin th di dng modal. JAplet là lp cha ca mi lp ng dng aplet. JPanel là mt vt cha, lu gi các thành phn giao din ngi dùng. Graphics là lp tru tng cung cp ng cnh ho v các i tng ho nh: ng thng, ng tròn, hình nh… Trang 121 Color lp này biu din mt mu sc. Font lp này biu th cho mt font ho. FontMetrics là mt lp tru tng dùng xác nh các thuc tính ca Font. t c các thành phn ho trong th vin Swing c nhóm trong gói javax.swing. a các thành phn trong th vin Swing u có tip u ng là ‘J’, Ví d mt nút lnh trong th vin Swing có tên là JButton, mt memu có tên là JMenu. Tt c nhng lp khác c lit kê trong hình di ây Chú ý: ng pha trn các thành phn giao din swing và awt trong cùng mt ng dng. Chng hn nh ng nên t mt JButton vào mt Panel và ng nên t Button vào JPanel. Vic làm này có th gây li. Object AWTEvent Font FontMetric Color Grapthics Componient Container Panel Applet Window Frame Dialog JComponent JApplet JFrame JDialog Các thành phn khác trong gói javax.swing c k tha t JComponent LayoutManage r BorderLayout FlowLayout GridLayout CardLayout GridBagLayout Trang 122 t lp c k tha t lp JComponent c th hin trong hình sau: 2. Mt s phng thc ca lp Component p Component cung cp các thuc tính, phng thc chung cho các lp con ca nó. Sau ây là mt s phng thc ca lp Component : - Dimension getSize(): cho li i tng thuc lp Dimension gm width (chiu rng), height (chiu cao) xác nh kích thc ca mt thành phn tính theo pixel. - void setSize(int width, int height) và void setSize(Dimension d) t li kích thc ca thành phn. - Point getLocation(): cho li ta (kiu Point) trên cùng bên trái (ta gc) ca thành phn ang xét. JComponent JTextComponent AbstracButton JMenuItem JCheckBoxMen JtoggleButton JMenu JRadioMenu JButton JEditorPane JTextField JTextArea JPasswordField JTextPane JCheckBox JRadioButto JLabel JList JCompoBox JMenuBar JOptionPane JScrollBar JCcollPane JFileChooser JPopupMenu JSeparator JSlider JTabbedPane JRootPaneJPane JprogressBar JToolBar JSplitBar JTable JTree JColorChooser JInternalFrame JToolTip JtableHeader JLayeredPane Trang 123 - void setLocation(int x, int y) và void setLocation(Point p):t li các ta c ch nh cho mt thành phn. - Rectangle getBounds(): cho li ng biên là hình ch nht Rectangle bao gm ta c và chiu dài, chiu rng ca hình ch nht. - void setBounds(int x, int y) và void setBounds(Rectangle r):t li ng biên cho mt thành phn. - void setForeground(Color c):c s dng t màu v cho thành phn ha - void setBackground(Color c):t màu nn cho thành phn ha. Các tham s ca hai hàm này là i tng ca lp Color sc gii thiu phn sau. - Font getFont():c s dng bit c font ca các chang x lý trong thành phn ha. - void setFont(Font f):t li font ch cho mt thành phn. - void setEnabled(boolean b):u i s b ca hàm getEnabled() là true thì thành phn ang xét hot ng bình thng, ngha là có kh nng kích hot (enable), có th tr li các yêu cu ca ngi s dng và sinh ra các s kin nh mong mun. Ngc li, nu là false thì thành phn tng ng s không kích hot c, ngha là không th tr li c các yêu u ca ngi s dng. - Lu ý: Tt c các thành phn giao din khi khi to u c kích hot - void setVisible(boolean b):t thành phn ha có thc hin th lên màn hình (nhìn thy c) hoc b che giu tùy thuc vào i s ca hàm setVisible() là true hay false. 3. Lp Container p Container là lp con ca lp tru tng Component. Các lp cha (lp con ca Container) cung cp tt c các chc nng xây dng các giao din ha ng dng, trong ó có phng thc add() c np chng dùng b sung mt thành phn vào vt cha và phng thc remove() cng c np chng g b mt thành phn ra khi vt cha. 4. To ra Frame p JFrame là lp con ca lp Frame (Frame là lp con ca lp Window) c s ng to ra nhng ca s cho các giao din ng dng GUI. ch bn chung to ra mt ca s là: - o ra mt frame có tiêu gì ó, ví d “My Frame” : JFrame myWindow= new JFrame(“My Frame”); - Xây dng mt cu trúc phân cp các thành phn bng cách s dng hàm myWindow.getContentPane().add() b sung thêm JPanel hoc nhng thành phn giao din khác vào Frame: Ví d: myWindow.getContentPane().add(new JButton(“OK”));// a vào mt nút (JButton) có tên “OK” vào frame - t li kích thc cho frame s dng hàm setSize(): myWindow.setSize(200, 300);// t li khung frame là 200 ( 300 - Gói khung frame ó li bng hàm pack(): myWindow.pack(); - Cho hin frame: myWindow.setVisible(true); Trang 124 II. Trình qun lý hin th trong Java Khi thit k giao din ha cho mt ng dng, chúng ta phi quan tâm n kích thc và cách b trí (layout) các thành phn giao din nh: JButton, JCheckbox, JTextField, v.v. sao cho tin li nht i vi ngi s dng. Java có các lp m nhim nhng công vic trên và qun lý các thành phn giao din GUI bên trong các vt cha. ng sau cung cp bn lp qun lý layout (cách b trí và sp xp) các thành phn GUI. Tên lp Mô t FlowLayout Xp các thành phn giao din trc tiên theo hàng t trái qua phi, sau ó theo ct t trên xung di. Cách sp xp này là mc nh i vi Panel, JPanel ,Applet và JApplet. GridLayout Các thành phn giao din c sp xp trong các ô li hình ch nht ln lt theo hàng t trái qua phi và theo ct t trên xung i trong mt phn t cha. Mi thành phn giao din cha trong t ô. BorderLayout Các thành phn giao din (ít hn 5) c t vào các v trí theo các ng: north (bc), south (nam), west (tây), east (ông) và center (trung tâm)). Cách sp xp này là mc nhi vi lp Window, Frame, Jframe, Dialog và JDialog. GridBagLayout Cho phép t các thành phn giao din vào li hình ch nht, nhng mt thành phn có th chim nhiu nhiu hn mt ô. null Các thành phn bên trong vt cha không c sp li khi kích thc ca vt cha thay i. Các phng pháp thit t layout ly v layout hay t li layout cho vt cha, chúng ta có th s dng hai phng thc ca lp Container: LayoutManager getLayout(); void setLayout(LayoutManager mgr); Các thành phn giao din sau khi ã c to ra thì phi c a vào mt phn t cha nào ó. Hàm add() ca lp Container c np chng thc hin nhim va các thành phn vào phn t cha. Component add(Component comp) Component add(Component comp, int index) Cmponent add(Component comp, Object constraints) Cmponent add(Component comp, Object constraints, int index) Trong ó, i s index c s dng ch ra v trí ca ô cn t thành phn giao din comp vào. i s constraints xác nh các hng a comp vào phn t cha. Ngc li, khi cn loi ra khi phn t cha mt thành phn giao din thì s dng các hàm sau: void remove(int index) Trang 125 void remove(Component comp) void removeAll() 1. Lp FlowLayout Lp FlowLayout cung cp các hàm to lp sp hàng các thành phn giao din: FlowLayout() FlowLayout(int aligment) FlowLayout(int aligment, int horizongap, int verticalgap) public static final int LEFT public static final int CENTER public static final int RIGHT i s aligment xác nh cách sp theo hàng: t trái, phi hay trung tâm, horizongap và verticalgap là khong cách tính theo pixel gia các hàng các ct. Trng hp mc nh thì khong cách gia các hàng, ct là 5 pixel. 2. Lp GridLayout p GridLayout cung cp các hàm to lp sp hàng các thành phn giao din: GridLayout() GridLayout(int rows, int columns) GridLayout(int rows, int columns, int hoiongap, int verticalgap) To ra mt li hình ch nht có rows ( columns ô có khong cách gia các hàng các ct là horizongap, verticalgap. Mt trong hai i s rows hoc columns có th là 0, nhng không th c hai, GridLayout(1,0) là to ra li có mt hàng. 3.Lp BorderLayout p BorderLayout cho phép t mt thành phn giao din vào mt trong bn hng: c (NORTH), nam (SOUTH), ông (EAST), tây (WEST) và gia (CENTER). BorderLayout() BorderLayout(int horizongap, int verticalgap) To ra mt layout mc nh hoc có khong cách gia các thành phn (tính bng pixel) là horizongap theo hàng và verticalgap theo ct. Component add(Component comp) void add(Component comp, Object constraint) public static final String NORTH public static final String SOUTH public static final String EAST public static final String WEST public static final String CENTER Trng hp mc nh là CENTER, ngc li, có th chnh hng t các thành phn comp vào phn t cha theo constraint là mt trong các hng trên. III. X lý s kin trong Java Các ng dng vi GUI thng c hng dn bi các s kin (event). Vic nhn t nút, m, óng các Window hay gõ các ký t t bàn phím, v.v. u to ra các s kin (event) và c gi ti cho chng trình ng dng. Trong Java các s kin c th hin ng các i tng. Lp c s nht, lp cha ca tt c các lp con ca các s kin là lp java.util.EventObject. Trang 126 Hình H7-20 Các lp x lý các s kin Các lp con ca AWTEvent c chia thành hai nhóm: Các lp mô t v ng ngha ca các s kin, Các lp s kin mc thp. 1. Ý ngha ca các lp a. ActionEvent kin này c phát sinh bi nhng hot thc hin trên các thành phn ca GUI. Các thành phn gây ra các s kin hành ng bao gm: - JButton - khi mt nút button c khích hot, - JList - khi mt mc trong danh sách c kích hot úp, - JmenuItem, JcheckBoxMenu, JradioMenu - khi mt mc trong thc n c chn, - JTextField - khi gõ phím ENTER trong trng vn bn (text). b. AdjustmentEvent kin này xy ra khi ta u chnh (adjustment) giá tr thanh cun (JScollBar) Scrollbar - khi thc hin mt ln cn chnh trong thanh trt Scrollbar. p này có phng thc int getValue(): cho li giá tr hin thi c xác nh bi ln cn chnh sau cùng. c. ItemEvent Các thành phn ca GUI gây ra các s kin v các mc gm có: java.lang.Object java.util.EventObject java.awt.event ActionEvent AdjustmentEvent ComponentEven t ItemEvent TextEvent ContainerEvent FocusEvent InputEvent PaintEvent WindowEvent KeyEvent MouseEven t java.awt.AWTEvent Trang 127 - JCheckbox - khi trng thái ca hp kim tra Checkbox thay i. - CheckboxMenuItem - khi trng thái ca hp kim tra Checkbox ng vi mc ca thc n thay i. - JRadioButton- khi trng thái ca hp chn (Option) thay i. - JList - khi mt mc trong danh sách c chn hoc b loi b chn. - JCompoBox - khi mt mc trong danh sách c chn hoc b loi b chn. p ItemEvent có phng thc Object getItem(): Cho li i tng c chn hay va b chn. d. TextEvent Các thành phn ca GUI gây ra các s kin v text gm có: TextArea - khi kt thúc bng nhn nút ENTER, TextField - khi kt thúc bng nhn nút ENTER. e. ComponentEvent kin này xut hin khi mt thành phn bn i/hin ra hoc thay thay i li kích thc. p ComponentEvent có phng thc: Component getComponent() Cho li i tng tham chiu kiu Component. f. ContainerEvent kin này xut hin khi mt thành phn c b sung hay b loi b khi vt cha (Container). g. FocusEvent kin loi này xut hin khi mt thành phn nhn hoc mt focus. h. KeyEvent Lp KeyEvent là lp con ca lp tru tng InputEvent c s dng x lý các kin liên quan n các phím ca bàn phím. Lp này có các phng thc: int getKeyCode() - i vi các s kin KEY_PRESSED hoc KEY_RELEASED, hàm này c s dng nhn li giá tr nguyên tng ng vi mã ca phím trên bàn phím. char getKeyChar() - i vi các s kin KEY_PRESSED, hàm này c s dng nhn li giá tr nguyên, mã Unicode tng ng vi ký t ca bàn phím. i. MouseEvent p MouseEvent là lp con ca lp tru tng InputEvent c s dng x lý các tín hiu ca chut. Lp này có các phng thc: int getX() int getY() Point getPoint() Các hàm này c s dng nhn li ta x, y ca v trí liên quan n s kin do chut gây ra. void translatePoint(int dx, int dy) Hàm translate() c s dng chuyn ta ca s kin do chut gây ra n (dx, dy). int getClickCount() Trang 128 Hàm getClickCount() m s ln kích chut. j. PaintEvent S kin này xut hin khi mt thành phn c v li, thc t s kin này xy ra khi phng thc paint()/ update() c gi n. k. WindowEvent S kin loi này xut hin khi thao tác vi các Window, chng hn nh: óng, phóng to, thu nh mt ca s. Lp này có phng thc: Window getWindow() Hàm này cho li i tng ca lp Window ng vi s kin liên quan n Window ã xy ra. Kiu s kin Ngun gây ra s kin Phng thc ang ký, gõ b i tng lng nghe Giao din Listener lng nghe tng ng AcitionEvent JButton JList TexField addComponentlistener removeActiontListener AcitionListener AdjustmentEvent JScrollbar addAdjustmentListener removeAdjustmentListener AdjustmentListe ner ItemEvent JCheckbox JCheckboxMenuItem JRadioButton JList JCompoBox addItemListener removeItemListener ItemListener TextEvent JTextArea JTexField JTextPane JEditorPane addTexListener removeTextListener TextListener ComponentEvent Component addComponentListener removeComponentListener ComponentListe ner ContainerEvent Container addContainerListener removeContainerListener ContainerListen er FocusEvent Component addFocusListener removeFocusListener FocusListener KeyEvent Component addkeyListener removeKeyListener KeyListener MouseEvent Component addMouseListener MouseMotionLi Trang 129 remoMouseListener addMouseMotionListener remoMouseMotionListener stener WindowEvent Window addWindowListener removeWindowListener WindowListener 3. Mt s lp u hp Giao din Listener lng nghe p u hp tng ng AcitionListener Không có lp u hp tng ng AdjustmentListener AdjustmentAdapter ItemListener Không có lp u hp tng ng TextListener Không có lp u hp tng ng ComponentListener ComponentAdapter ContainerListener ContainerAdapter FocusListener FocusAdapter KeyListener KeyAdapter MouseMotionListener MouseMotionAdapter WindowListener WindowAdapter t s ví d minh ha /* The applet enables the user to enter the interest rate,the number of years, and the loan amount. Clicking the compute button displays the monthly payment and the total payment. */ import java.awt.*; import java.awt.event.*; import javax.swing.border.TitledBorder; import java.applet.Applet; import javax.swing.*; public class StudentApp extends JFrame implements ActionListener{ private JTextField tRate = new JTextField(10); private JTextField tYear = new JTextField(10); private JTextField tLoan = new JTextField(10); private JTextField tTotal = new JTextField(10); private JButton compute = new JButton("Compute mortgage"); public static void main(String[] args){ StudentApp fr = new StudentApp(); fr.setSize(400, 200); fr.setTitle("Mortgage Application"); //fr.center(); fr.setVisible(true); } [...]... thu vien java .awt. *"); c.setSize(500, 300); c.show(); } } /* The program has 4 buttons labeled Add, Sub, Mul, Div and also create a menu to perform the same operation The user will also create to perform the same operation The user can choose the operation either from buttons or from menu selections Fig The following contains a sample run of the program */ import java .awt. *; import java .awt. event.*;... res.setText(String.valueOf(r)); } } p trình menu Trang 139 /* The program has 4 buttons labeled Add, Sub, Mul, Div and also create a menu to perform the same operation The user will also create to perform the same operation The user can choose the operation either from buttons or from menu selections Fig The following contains a sample run of the program */ import java .awt. *; import java .awt. event.*; import javax.swing.*;... form.format(cal.getTime()); FontMetrics fm = g.getFontMetrics(); g.drawString(today, (getSize().width-fm.stringWidth(today))/2, yC+clockR+30); } } d ng các u khi n package welcome; import java .awt. *; import java .awt. event.*; public class ComponentTest extends Frame implements ActionListener,MouseListener { TextField tf1=new TextField(30); TextField tf2 = new TextField(40); Label label1 = new Label("This... (Double.valueOf(tLoan.getText())).doubleValue(); // Compute the total and displays it double m = loan * interest * year; tTotal.setText(String.valueOf(m)); } } } S d ng ListBox và nút l nh import java .awt. *; import java .awt. event.*; class ChoiceList extends Frame implements ActionListener{ Label l1 = new Label("What is your favorite color"); Choice colors = new Choice(); Button bt = new Button("Exit"); public... public static void main(String args[]){ ChoiceList t = new ChoiceList("Choice List"); t.setSize(300, 200); t.show(); } } /* ClockGroup.java * display a group of international clocks */ import java .awt. *; import java .awt. event.*; import javax.swing.*; import java.util.*; import javax.swing.Timer; import java.text.*; public class ClockGroup extends JApplet implements ActionListener{ private ClockPanel clockP1, . vin awt. Mc dù các thành phn awt n c h tr trong Java 2 nhng, tuy nhiên Sun khuyên bn nên s dng các thành phn Swing thay cho các thành phn awt, . thành phn trong th vin awt. Chúng ch thay th mt phn ca awt nh: Button, Panel, TextFeild, v.v. Còn các lp tr giúp khác trong awt nh : Graphics, Color,