Lập trình đồ họa AWT

23 454 1
Lập trình đồ họa AWT

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trang 120 Chng 6: LP TRÌNH  HO AWT Mt kh nng ca Java là cho phép ta xây dng các ng dng có giao din  ho hay còn gi là GUI (Grapthical User Interface). Khi Java c phát hành, các thành phn  hoc tp trung vào th vin mang tên Abstract Window Toolkit (AWT). i vi i h nn, thành phn AWT sc ánh x sang mt thành phn nn c th, bng cách s ng trc tip mã native ca h nn, chính vì vy nó ph thuc rt nhiu vào h nn và nó còn gây li trên mt s h nn. Vi bn phát hành Java 2, các thành phn giao din c thay bng tp hp các thành phn linh hot, a nng, mnh m, c lp vi h nn thuc th vin Swing. Phn ln các thành phn trong th vin Swing u c tô v trc tip trên canvas bng mã lnh ca Java, ngoi tr các thành phn là lp con ca lp java.awt.Window hoc Java.awt.Panel vn phi c v bng GUI trên nn c th. Thành phn Swing ít ph thuc vào h nn hn do vy ít gp li hn và c bit nó s dng ít tài nguyên ca h thng hn các thành phn trong th vin awt. Mc dù các thành phn awt n c h tr trong Java 2 nhng, tuy nhiên Sun khuyên bn nên s dng các thành phn Swing thay cho các thành phn awt, tuy nhiên các thành phn trong th vin Swing không th thay tt c các thành phn trong th vin awt. Chúng ch thay th mt phn ca awt nh: Button, Panel, TextFeild, v.v. Còn các lp tr giúp khác trong awt nh : Graphics, Color, Font, FontMetrics, v.v. vn không thay i. Bên cnh ó các thành phn Swing còn  dng mô hình s lý s kin ca awt. I. Gii thiu v h thng  ho ca Java 1. Gii thiu chung Thit k API cho lp trình  ho ca Java là mt ví d hoàn ho v cách dùng lp, s  tha và giao din. API cho lp trình  ho bao gm mt tp rt nhiu lp nhm tr giúp xây dng các thành phn giao din khác nhau nh: ca s,nút n, ô vn bn, menu, hp kim, v.v. Mi quan h k tha gia các thành phn này c mô t trong hình sau: Componient ây là lp (tru tng) cha ca mi lp giao din ngi dùng. Lp này cung cp các thuc tính, hành vi c bn nht ca tt c các thành phn giao din. Container Là mt vt cha dùng  ghép nhóm các thành phn giao din khác. Mi t cha có mt lp qun lý hin th, lp qun lý hin th có trách nhim b trí cách thc hin th các thành phn bên trong. Hai vt cha hay c s dng nht la JFrame và JPanel. Jcomponient Là lp cha ca mi thành phn Swing ligth weight, c v trc tip lên canvas bng mã lnh Java. Window c s dng  to ra mt ca s, Thông thng ta hay s dng hai lp con ca nó là JFrame và JDialog. JFrame là ca s không lng bên trong ca s khác. JDialog là mt ca sc hin th di dng modal. JAplet là lp cha ca mi lp ng dng aplet. JPanel là mt vt cha, lu gi các thành phn giao din ngi dùng. Graphics là lp tru tng cung cp ng cnh  ho v các i tng  ho nh: ng thng, ng tròn, hình nh… Trang 121 Color lp này biu din mt mu sc. Font lp này biu th cho mt font  ho. FontMetrics là mt lp tru tng dùng  xác nh các thuc tính ca Font. t c các thành phn  ho trong th vin Swing c nhóm trong gói javax.swing. a  các thành phn trong th vin Swing u có tip u ng là ‘J’, Ví d mt nút lnh trong th vin Swing có tên là JButton, mt memu có tên là JMenu. Tt c nhng lp khác c lit kê trong hình di ây Chú ý: ng pha trn các thành phn giao din swing và awt trong cùng mt ng dng. Chng hn nh ng nên t mt JButton vào mt Panel và ng nên t Button vào JPanel. Vic làm này có th gây li. Object AWTEvent Font FontMetric Color Grapthics Componient Container Panel Applet Window Frame Dialog JComponent JApplet JFrame JDialog Các thành phn khác trong gói javax.swing c k tha t JComponent LayoutManage r BorderLayout FlowLayout GridLayout CardLayout GridBagLayout Trang 122 t lp c k tha t lp JComponent c th hin trong hình sau: 2. Mt s phng thc ca lp Component p Component cung cp các thuc tính, phng thc chung cho các lp con ca nó. Sau ây là mt s phng thc ca lp Component : - Dimension getSize(): cho li i tng thuc lp Dimension gm width (chiu rng), height (chiu cao) xác nh kích thc ca mt thành phn tính theo pixel. - void setSize(int width, int height) và void setSize(Dimension d) t li kích thc ca thành phn. - Point getLocation(): cho li ta  (kiu Point) trên cùng bên trái (ta  gc) ca thành phn 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 li các ta c ch nh cho mt thành phn. - Rectangle getBounds(): cho li ng biên là hình ch nht Rectangle bao gm ta  c và chiu dài, chiu rng ca hình ch nht. - void setBounds(int x, int y) và void setBounds(Rectangle r):t li ng biên cho mt thành phn. - void setForeground(Color c):c s dng t màu v cho thành phn  ha - void setBackground(Color c):t màu nn cho thành phn  ha. Các tham s ca hai hàm này là i tng ca lp Color sc gii thiu  phn sau. - Font getFont():c s dng  bit c font ca các chang x lý trong thành phn  ha. - void setFont(Font f):t li font ch cho mt thành phn. - void setEnabled(boolean b):u i s b ca hàm getEnabled() là true thì thành phn ang xét hot ng bình thng, ngha là có kh nng kích hot (enable), có th tr li các yêu cu ca ngi s dng và sinh ra các s kin nh mong mun. Ngc li, nu là false thì thành phn tng ng s không kích hot c, ngha là không th tr li c các yêu u ca ngi s dng. - Lu ý: Tt c các thành phn giao din khi khi to u c kích hot - void setVisible(boolean b):t thành phn  ha có thc hin th lên màn hình (nhìn thy c) hoc b che giu tùy thuc vào i s ca hàm setVisible() là true hay false. 3. Lp Container p Container là lp con ca lp tru tng Component. Các lp cha (lp con ca Container) cung cp tt c các chc nng  xây dng các giao din  ha ng dng, trong ó có phng thc add() c np chng dùng  b sung mt thành phn vào vt cha và phng thc remove() cng c np chng  g b mt thành phn ra khi vt cha. 4. To ra Frame p JFrame là lp con ca lp Frame (Frame là lp con ca lp Window) c s ng  to ra nhng ca s cho các giao din ng dng GUI. ch bn chung  to ra mt ca s là: - o ra mt frame có tiêu  gì ó, ví d “My Frame” : JFrame myWindow= new JFrame(“My Frame”); - Xây dng mt cu trúc phân cp các thành phn bng cách s dng hàm myWindow.getContentPane().add()  b sung thêm JPanel hoc nhng thành phn giao din khác vào Frame: Ví d: myWindow.getContentPane().add(new JButton(“OK”));// a vào mt nút (JButton) có tên “OK” vào frame - t li kích thc cho frame s dng hàm setSize(): myWindow.setSize(200, 300);// t li khung frame là 200 ( 300 - Gói khung frame ó li bng hàm pack(): myWindow.pack(); - Cho hin frame: myWindow.setVisible(true); Trang 124 II. Trình qun lý hin th trong Java Khi thit k giao din  ha cho mt ng dng, chúng ta phi quan tâm n kích thc và cách b trí (layout) các thành phn giao din nh: JButton, JCheckbox, JTextField, v.v. sao cho tin li nht i vi ngi s dng. Java có các lp m nhim nhng công vic trên và qun lý các thành phn giao din GUI bên trong các vt cha. ng sau cung cp bn lp qun lý layout (cách b trí và sp xp) các thành phn GUI. Tên lp Mô t FlowLayout Xp các thành phn giao din trc tiên theo hàng t trái qua phi, sau ó theo ct t trên xung di. Cách sp xp này là mc nh i vi Panel, JPanel ,Applet và JApplet. GridLayout Các thành phn giao din c sp xp trong các ô li hình ch nht ln lt theo hàng t trái qua phi và theo ct t trên xung i trong mt phn t cha. Mi thành phn giao din cha trong t ô. BorderLayout Các thành phn giao din (ít hn 5) c t vào các v trí theo các ng: north (bc), south (nam), west (tây), east (ông) và center (trung tâm)). Cách sp xp này là mc nhi vi lp Window, Frame, Jframe, Dialog và JDialog. GridBagLayout Cho phép t các thành phn giao din vào li hình ch nht, nhng mt thành phn có th chim nhiu nhiu hn mt ô. null Các thành phn bên trong vt cha không c sp li khi kích thc ca vt cha thay i. Các phng pháp thit t layout  ly v layout hay t li layout cho vt cha, chúng ta có th s dng hai phng thc ca lp Container: LayoutManager getLayout(); void setLayout(LayoutManager mgr); Các thành phn giao din sau khi ã c to ra thì phi c a vào mt phn t cha nào ó. Hàm add() ca lp Container c np chng  thc hin nhim va các thành phn vào phn t cha. 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 dng  ch ra v trí ca ô cn t thành phn giao din comp vào. i s constraints xác nh các hng a comp vào phn t cha. Ngc li, khi cn loi ra khi phn t cha mt thành phn giao din thì s dng các hàm sau: void remove(int index) Trang 125 void remove(Component comp) void removeAll() 1. Lp FlowLayout Lp FlowLayout cung cp các hàm to lp  sp hàng các thành phn giao din: 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 sp theo hàng: t trái, phi hay trung tâm, horizongap và verticalgap là khong cách tính theo pixel gia các hàng các ct. Trng hp mc nh thì khong cách gia các hàng, ct là 5 pixel. 2. Lp GridLayout p GridLayout cung cp các hàm to lp  sp hàng các thành phn giao din: GridLayout() GridLayout(int rows, int columns) GridLayout(int rows, int columns, int hoiongap, int verticalgap) To ra mt li hình ch nht có rows ( columns ô có khong cách gia các hàng các ct là horizongap, verticalgap. Mt trong hai i s rows hoc columns có th là 0, nhng không th c hai, GridLayout(1,0) là to ra li có mt hàng. 3.Lp BorderLayout p BorderLayout cho phép t mt thành phn giao din vào mt trong bn hng: c (NORTH), nam (SOUTH), ông (EAST), tây (WEST) và  gia (CENTER). BorderLayout() BorderLayout(int horizongap, int verticalgap) To ra mt layout mc nh hoc có khong cách gia các thành phn (tính bng pixel) là horizongap theo hàng và verticalgap theo ct. 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 Trng hp mc nh là CENTER, ngc li, có th chnh hng t các thành phn comp vào phn t cha theo constraint là mt trong các hng trên. III. X lý s kin trong Java Các ng dng vi GUI thng c hng dn bi các s kin (event). Vic nhn t nút, m, óng các Window hay gõ các ký t t bàn phím, v.v. u to ra các s kin (event) và c gi ti cho chng trình ng dng. Trong Java các s kin c th hin ng các i tng. Lp c s nht, lp cha ca tt c các lp con ca các s kin là lp java.util.EventObject. Trang 126 Hình H7-20 Các lp x lý các s kin Các lp con ca AWTEvent c chia thành hai nhóm: Các lp mô t v ng ngha ca các s kin, Các lp s kin  mc thp. 1. Ý ngha ca các lp a. ActionEvent  kin này c phát sinh bi nhng hot thc hin trên các thành phn ca GUI. Các thành phn gây ra các s kin hành ng bao gm: - JButton - khi mt nút button c khích hot, - JList - khi mt mc trong danh sách c kích hot úp, - JmenuItem, JcheckBoxMenu, JradioMenu - khi mt mc trong thc n c chn, - JTextField - khi gõ phím ENTER trong trng vn bn (text). b. AdjustmentEvent  kin này xy ra khi ta u chnh (adjustment) giá tr thanh cun (JScollBar) Scrollbar - khi thc hin mt ln cn chnh trong thanh trt Scrollbar. p này có phng thc int getValue(): cho li giá tr hin thi c xác nh bi ln cn chnh sau cùng. c. ItemEvent Các thành phn ca GUI gây ra các s kin v các mc gm 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 trng thái ca hp kim tra Checkbox thay i. - CheckboxMenuItem - khi trng thái ca hp kim tra Checkbox ng vi mc ca thc n thay i. - JRadioButton- khi trng thái ca hp chn (Option) thay i. - JList - khi mt mc trong danh sách c chn hoc b loi b chn. - JCompoBox - khi mt mc trong danh sách c chn hoc b loi b chn. p ItemEvent có phng thc Object getItem(): Cho li i tng c chn hay va b  chn. d. TextEvent Các thành phn ca GUI gây ra các s kin v text gm có: TextArea - khi kt thúc bng nhn nút ENTER, TextField - khi kt thúc bng nhn nút ENTER. e. ComponentEvent  kin này xut hin khi mt thành phn bn i/hin ra hoc thay thay i li kích thc. p ComponentEvent có phng thc: Component getComponent() Cho li i tng tham chiu kiu Component. f. ContainerEvent  kin này xut hin khi mt thành phn c b sung hay b loi b khi vt cha (Container). g. FocusEvent  kin loi này xut hin khi mt thành phn nhn hoc mt focus. h. KeyEvent Lp KeyEvent là lp con ca lp tru tng InputEvent c s dng  x lý các  kin liên quan n các phím ca bàn phím. Lp này có các phng thc: int getKeyCode() - i vi các s kin KEY_PRESSED hoc KEY_RELEASED, hàm này c s dng  nhn li giá tr nguyên tng ng vi mã ca phím trên bàn phím. char getKeyChar() - i vi các s kin KEY_PRESSED, hàm này c s dng  nhn li giá tr nguyên, mã Unicode tng ng vi ký t ca bàn phím. i. MouseEvent p MouseEvent là lp con ca lp tru tng InputEvent c s dng  x lý các tín hiu ca chut. Lp này có các phng thc: int getX() int getY() Point getPoint() Các hàm này c s dng  nhn li ta  x, y ca v trí liên quan n s kin do chut gây ra. void translatePoint(int dx, int dy) Hàm translate() c s dng  chuyn ta  ca s kin do chut gây ra n (dx, dy). int getClickCount() Trang 128 Hàm getClickCount() m s ln kích chut. j. PaintEvent S kin này xut hin khi mt thành phn c v li, thc t s kin này xy ra khi phng thc paint()/ update() c gi n. k. WindowEvent S kin loi này xut hin khi thao tác vi các Window, chng hn nh: óng, phóng to, thu nh mt ca s. Lp này có phng thc: Window getWindow() Hàm này cho li i tng ca lp Window ng vi s kin liên quan n Window ã xy ra. Kiu s kin Ngun gây ra s kin Phng thc ang ký, gõ b i tng lng nghe Giao din Listener lng nghe tng 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. Mt s lp u hp Giao din Listener lng nghe p u hp tng ng AcitionListener Không có lp u hp tng ng AdjustmentListener AdjustmentAdapter ItemListener Không có lp u hp tng ng TextListener Không có lp u hp tng ng ComponentListener ComponentAdapter ContainerListener ContainerAdapter FocusListener FocusAdapter KeyListener KeyAdapter MouseMotionListener MouseMotionAdapter WindowListener WindowAdapter t s ví d minh ha /* 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, . vin awt. Mc dù các thành phn awt n c h tr trong Java 2 nhng, tuy nhiên Sun khuyên bn nên s dng các thành phn Swing thay cho các thành phn awt, . thành phn trong th vin awt. Chúng ch thay th mt phn ca awt nh: Button, Panel, TextFeild, v.v. Còn các lp tr giúp khác trong awt nh : Graphics, Color,

Ngày đăng: 29/09/2013, 09:20

Hình ảnh liên quan

T tc nh ngl p khá cc lit kê trong hình di ây - Lập trình đồ họa AWT

tc.

nh ngl p khá cc lit kê trong hình di ây Xem tại trang 2 của tài liệu.
tl p ck tha tl p JComponen tc th h in trong hình sau: - Lập trình đồ họa AWT

tl.

p ck tha tl p JComponen tc th h in trong hình sau: Xem tại trang 3 của tài liệu.
Hình H7-20 Các px lý cá cs kin Các l p con c a AWTEvent  c chia thành hai nhóm: - Lập trình đồ họa AWT

nh.

H7-20 Các px lý cá cs kin Các l p con c a AWTEvent c chia thành hai nhóm: Xem tại trang 7 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan