1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình giao diện đồ họa GUI

23 1,1K 18
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Lập trình giao diện đồ họa GUI
Thể loại Đề tài
Định dạng
Số trang 23
Dung lượng 686,65 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

// Java core packages import java.awt.*; import java.awt.event.*; // Java extension packages import javax.swing.*; public class CheckBoxTest extends JFrame { private JTextField field

Trang 1

Đ tài 10 L p trình giao di n đ h a GUI ề ậ ệ ồ ọ

I Gi i thi u AWT ớ ệ

Abstract Windows Toolkit – AWT: Là th vi n c a Java cung c p cho l p trình viên cácư ệ ủ ấ ậ

gi i pháp giao di n ngả ệ ười dùng đ ho (Graphical User Interface - GUI) thân thi n.ồ ạ ệ

M t giao di n ngộ ệ ười dùng được hình thành t các ph n t c a GUI M t ph n t GUIừ ầ ử ủ ộ ầ ử

được thi t l p b ng cách s d ng các th t c:ế ậ ằ ử ụ ủ ụ

1 T o đ i tạ ố ượng

2 Xác đ nh s xu t hi n ban đ u c a đ i tị ự ấ ệ ầ ủ ố ượng

3 Ch ra nó n m đâu.ỉ ằ ở

4 Thêm ph n t vào giao di n trên màn hình.ầ ử ệ

Đ làm vi c v i các đ i tể ệ ớ ố ượng GUI chúng ta c n nh p gói java.awt.*.ầ ậ

AWT cung c p các thành ph n khác nhau đ t o GUI hi u qu , các thành ph n này cóấ ầ ể ạ ệ ả ầ

th là:ể

• V t ch a (Container).ậ ứ

• Thành ph n (Component).ầ

• Trình qu n lý cách trình bày (Layout manager).ả

• Đ ho (Graphics) và các tính năng v (draw).ồ ạ ẽ

• Phông ch (Font).ữ

• S ki n (Event).ự ệ

T phiên b n 1.4, Java phát tri n m t th vi n m r ng m i v i đa s các l p GUI kừ ả ể ộ ư ệ ở ộ ớ ớ ố ớ ế

th a t AWT nh ng có kh năng di đ ng t t h n Các l p GUI trong swing có thêm ti n t “J”ừ ừ ư ả ộ ố ơ ớ ề ố

so v i các l p trong AWT Sau đây, chúng ta s xét các thành ph n GUI trong swing.ớ ớ ẽ ầ

S đ phân c p th a k các đ i tơ ồ ấ ừ ế ố ượng GUI trong swing nh sau:ư

Trang 2

II V t ch a (Container) ậ ứ

Là vùng mà ta có th đ t các thành ph n (component) c a giao di n M t v t ch a cóể ặ ầ ủ ệ ộ ậ ứ

th ch a nhi u ph n t V t ch a thể ứ ề ầ ử ậ ứ ường đượ ử ục s d ng là:

• JPanel - khung ch a đ n gi n nh t, đ nhóm các đ i tứ ơ ả ấ ể ố ượng con l i và s p x pạ ắ ế theo cách thích h p.ợ

• JFrame - là m t c a s nh m i ng d ng c a windows, đ t o các ng d ngộ ử ổ ư ọ ứ ụ ủ ể ạ ứ ụ windows

• JDialogs - là c a s nh ng không đ y đ ch c năng nh Frame, nó là c a sử ổ ư ầ ủ ứ ư ử ổ

h p tho i đ a ra nh ng l i thông báo.ộ ạ ư ữ ờ

• JScrollPanel - khung ch a nh Panel nh ng có hai thanh trứ ư ư ượt

II.1 JFrame

T o đ i tạ ố ượng khung ch a JFrame b ng phứ ằ ương th c kh i t o: void JFrame();ứ ở ạ

T o Frame v i tiêu đ bên trên: void JFrame(String FrameTitle);ạ ớ ề

Ví dụ:

JFrame frame1 = new JFrame();

JFrame frame2 = new JFrame("Cua so Frame");

import javax.swing.*;

public class FrameSample {

public static void main(String[] argvs){

JFrame f = new JFrame();

f.setSize(400,400);

f.setVisible(true);

}}

• B hoàn toàn đ i tỏ ố ượng JFrame: frame1.dispose();

• Thay đ i tiêu đ cho JFrame: frame1.setTitle(String newTitle);ổ ề

• L y tiêu đ c a JFrame: public String getTitle();ấ ề ủ

• Co dãn JFrame: public void setResizable(boolean b); trong đó: b = true thì Frame

có th thay đ i kích thể ổ ước, b = false thì không đ i.ổ

• Xác đ nh JFrame đang tình tr ng nào: public boolean isResizable();ị ở ạ

• Thay đ i bi u tổ ể ượng JFrame: public setIconImage(Image img);

II.2 JPanel

JPanel không th nhìn th y tr c ti p, nó là đ i tể ấ ự ế ố ượng dùng đ ch a các thành ph nể ứ ầ GUI trên màn hình Do đó chúng ta c n g n JPanel vào đ i tầ ắ ố ượng nào đó nh : JFrame, JApplet,ư

T o khung ch a JPanel b ng phạ ứ ằ ương th c kh i t o: JPanel panel1 = new JPanel();ứ ở ạ

115

Trang 3

Ví d sau t o m t đ i tụ ạ ộ ố ượng JPanel và đ t vào nó m t đ i tặ ộ ố ượng nút b m JButton ấimport javax.swing.*;

public class FrameSample {

public static void main(String[] argvs){

JFrame f = new JFrame();

JPanel p = new JPanel();

II.3 JDialog

Nh JFrame, nh ng ít ch c năng h n, còn đư ư ứ ơ ược g i là popup-window.ọ

Ta có th t o JDialog dể ạ ưới hai hình th c:ứ

• modal: là c a s JDialog khi th c hi n s khoá ch t các c a s khác C a sử ổ ự ệ ẽ ặ ử ổ ử ổ này thường yêu c u m t tác v nào đó c n ph i hoàn thành ngay.ầ ộ ụ ầ ả

• non-modal: ngượ ạ ớc l i v i modal, c a s này thích ng v i các thao tác mangử ổ ứ ớtính tuỳ bi n ế

Cách t o khung ch a JDialog t phạ ứ ừ ương th c kh i t o: ứ ở ạ

public JDialog(JFrame parentWindow, boolean isModal);

trong đó: isModal - quy t đ nh xem JDialog đế ị ượ ạc t o ra d ng nào: isModal = true choở ạmodal còn isModal = false cho non-modal

Ví d : JDialog myDialog = new JDialog(myWindow, true)ụ

T o JDialog có tiêu đ đ nh trạ ề ị ước:

public JDialog(Frame parentWindow, String title, boolean isModal)

JDialog không th g n v i Applet, mu n đ a ra m t JDialog t JApplet ta ph i t o raể ắ ớ ố ư ộ ừ ả ạ

m t JFrame gi t o.ộ ả ạ

Đ a đ i tư ố ượng JDialog ra màn hình b ng phằ ương th c show().ứ

Gi u c a s JDialog ta dùng phấ ử ổ ương th c: hide().ứ

n hi n JDialog ta còn có ph ng th c: setVisible(boolean)

Các đ c đi m thặ ể ường s d ng v i đ i tử ụ ớ ố ượng JDialog th hi n tể ệ ương t v i JFrame.ự ớ

L y và thay đ i kích thấ ổ ước JDialog: public setResizable(boolean), boolean isResizable()

Đ t và l y tiêu đ c a JDialog:ặ ấ ề ủ void setTitle(String), String getTitle();

Xác minh m t JDialog đang thu c d ng nào ta g i phộ ộ ạ ọ ương th c: public booleanứisModal()

Chương trình sau đây s n ho c hi n m t Jdialog m i khi nh t vào m t nút b m:ẽ ẩ ặ ệ ộ ỗ ấ ộ ấ

Trang 4

public FrameSample() // Constroctor

{

d = new JDialog(this,"Day la Jdialog",false);

d.setSize(100,100);

JPanel p = new JPanel();

JButton b = new JButton("Xem/Tat mot JDialog");

b.addActionListener( new ActionListener(){

public void actionPerformed(ActionEvent e){

d.setVisible(!d.isVisible());

}} );

Trang 5

II.4 JScrollPane

Đây không ph i là m t c a s nh ng có tính ch t nh khung ch a JPanel dùng đ ch aả ộ ử ổ ư ấ ư ứ ể ứ các đ i tố ượng Tính ch t khác là khi đ i tấ ố ượng nó ch a quá l n thì JScrollPane s xu t hi nứ ớ ẽ ấ ệ thanh trượ ứt đ ng và ngang hai bên vi n đ ta có th xem đở ề ể ể ược toàn b JScrollPane độ ượ c

ng d ng trong các danh sách ch n

III Gi i thi u v các thành ph n GUI c b n ớ ệ ề ầ ơ ả

• Jlabel: Ch m t vùng hi n th văn b n ho c các icon.ỉ ộ ể ị ả ặ

• JtextField: Ch m t đ i tỉ ộ ố ượng cho phép nh p d li u t bàn phím.ậ ữ ệ ừ

Ví d : Button nutOK = new Button("OK");ụ

Đ nút nh n vào Applet hay c a s chư ấ ử ổ ương trình b ng l nh: add(nutOK);ằ ệ

Đ đ i tên nhãn cho nút nh n ta g i phể ổ ấ ọ ương th c public void setLabel(StringứnewLabel)

Đ xem tên nhãn hi n t i c a nút nh n, ta g i phể ệ ạ ủ ấ ọ ương th c public String getLabel()ứ

Ví d :ụ Button nutOK = new Button(); nutOK.setLabel("OK");

setText(String nameLabel): Đ t l i n i dung m i cho nhãn.ặ ạ ộ ớ

Label.CENTER, Label.LEFT, Label.RIGHT: nh ng giá tr căn l ữ ị ề

L y n i dung hi n hành c a nhãn: public String getText();ấ ộ ệ ủ

Xem nhãn đang được căn l ch đ nào: public int getAlignment();ề ở ế ộ

Thi t l p l i ch đ căn l : public void setAlignment(int align) throwsế ậ ạ ế ộ ềIlligalArgumentException

Sau đây là ví d s d ng JLabel:ụ ử ụ

// Minh h a v JLabelọ ề

// Nh p các gói th vi nậ ư ệ

import java.awt.*;

Trang 6

import java.awt.event.*;

// Gói Java m r ngở ộ

import javax.swing.*;

public class LabelTest extends JFrame {

private JLabel label1, label2, label3;

// T o giao di n GUIạ ệ

public LabelTest()

{

super( "Testing JLabel" ); // Contructor c a JFrameủ

// L y đ i tấ ố ượng pane c a m t JFrameủ ộ

Container container = getContentPane();

container.setLayout( new FlowLayout() );

// constructor c a JLabelủ

label1 = new JLabel( "Label with text" );

label1.setToolTipText( "This is label1" ); // hi n th khi di chu t đ nể ị ộ ế

container.add( label1 ); // thêm vào container

// T o Jlabel v i icon ho c textạ ớ ặ

Icon bug = new ImageIcon( "bug1.gif" );

label2 = new JLabel( "Label with text and icon", bug, SwingConstants.LEFT );

label2.setToolTipText( "This is label2" );

container.add( label2 );

// JLabel không tham số

label3 = new JLabel();

label3.setText( "Label with icon and text at bottom" );

Trang 7

}

III.3 Nút đánh d u (checkbox) ấ

M t nút đánh d u có hai ph n: nhãn và d u bi u hi n tr ng thái.ộ ấ ầ ấ ể ệ ạ

Ta có th t o nút đánh d u theo 5 phể ạ ấ ương th c kh i d ng:ứ ở ự

• public Checkbox(): t o ô đánh d u không có nhãn.ạ ấ

• public Checkbox(String cbLabel): t o ô đánh d u v i m t nhãn cbLabel g nạ ấ ớ ộ ắ kèm

• public Checkbox(String cbLabel, boolean state): T o ô đánh d u v i m t nhãnạ ấ ớ ộcbLabel g n kèm v i tr ng thái ban đ u c a ô đó.ắ ớ ạ ầ ủ

• public Checkbox(String cbLabel, boolean state, CheckboxGroup g);

• public Checkbox(String cbLabel , CheckboxGroup g, boolean state): dùng đ t oể ạ

ô đánh d u có nhãn v i tr ng thái đánh d u ban đ u, nút t o ra đấ ớ ạ ấ ầ ạ ược nhómtrong nhóm g Nhóm các ô đánh d u tr thành nút ch n.ấ ở ọ

Ki m tra và thi t l p tr ng thái ể ế ậ ạ :

Đ ki m tra m t ô có để ể ộ ược đánh d u không ta dùng phấ ương th c: public booleanứgetState();

N u mu n thi t l p tr ng thái, ta dùng phế ố ế ậ ạ ương th c: setState(boolean state).ứ

X lý tình hu ng khi ô đánh d u thay đ i tr ng thái: ử ố ấ ổ ạ

Đ l ng nghe ô đánh d u, ta dùng phể ắ ấ ương th c: addItemListener(ItemListener L)ứ

Đ lo i b l ng nghe đó ta dùng phể ạ ỏ ắ ương th c: removeItemListener(ItemListener L)ứ

Trang 8

// Java core packages

import java.awt.*;

import java.awt.event.*;

// Java extension packages

import javax.swing.*;

public class CheckBoxTest extends JFrame {

private JTextField field;

private JCheckBox bold, italic;

Container container = getContentPane();

container.setLayout( new FlowLayout() );

// Đ t ô nh p và font chặ ậ ữ

field = new JTextField( "Theo dõi font ch thay đ i", 20 );ữ ổ

field.setFont( new Font( "Serif", Font.PLAIN, 14 ) );

// Đăng ký đ i tố ượng l ng ngheắ

CheckBoxHandler handler = new CheckBoxHandler();

private class CheckBoxHandler implements ItemListener {

private int valBold = Font.PLAIN;

private int valItalic = Font.PLAIN;

Trang 9

III.4 Nút ch n (radio button) ọ

Ta t o m t đ i tạ ộ ố ượng giao ti p ItemListener đ l ng nghe tình hu ng.ế ể ắ ố

Phương th c getItemSelectable s tr v đ i tứ ẽ ả ề ố ượng n i mà tình hu ng phát sinh:ơ ốpublic ItemSelectable getItemSelectable();

Phương th c getItem c a đ i tứ ủ ố ượng ItemEvent s cho ta bi t giá tr nút ch n:ẽ ế ị ọpublic Object getItem();

Sau đây là ví d v s d ng ô ch n:ụ ề ử ụ ọ

// Đăng ký đ i tố ượng l ng nghe cho m i ô ch n radioắ ỗ ọ

RadioButtonHandler handler = new RadioButtonHandler();

III.5 H p tho i Combo ộ ạ

Java h tr h p tho i Combo thông qua đ i tỗ ợ ộ ạ ố ượng c a class JComboBox Đây là m tủ ộ danh sách x xu ng, đ a ra m t danh sách các m c và ta ch đổ ố ư ộ ụ ỉ ược ch n 1 m c trong đó.ọ ụJComboBox cũng phát sinh s ki n ItemEvent gi ng nh JRadioButton và JCheckBox ự ệ ố ư

Chương trình sau đây minh h a vi c s d ng JComboBox v i các ph n t là các nhọ ệ ử ụ ớ ầ ử ả GIF

// Java core packages

import java.awt.*;

import java.awt.event.*;

// Java extension packages

import javax.swing.*;

public class ComboBoxTest extends JFrame {

private JComboBox imagesComboBox;

private JLabel label;

Trang 10

private String names[] = { "bug1.gif", "bug2.gif", "travelbug.gif", "buganim.gif" };

private Icon icons[] = { new ImageIcon(names[0]), new ImageIcon(names[1]), new ImageIcon(names[2]), new ImageIcon(names[3])};

Container container = getContentPane();

container.setLayout( new FlowLayout() );

// đ t m t JLabel hi n thi ImageIcons tặ ộ ể ương ngứ

label = new JLabel( icons[ 0 ] );

III.6 Danh sách (Lists)

L p List cho phép ta t o m t danh sách các ph n t cho ta l a ch nớ ạ ộ ầ ử ự ọ

123

Trang 11

T o m t danh sách: ạ ộ

Phương th c kh i d ng m c đ nh: public List() vd: List list = new List();ứ ở ự ặ ị

ho c đ ch đ nh bao nhiêu ph n t s đặ ể ỉ ị ầ ử ẽ ược hi n th cùng m t lúc trong danh sách:ể ị ộpublic List(int rows)

ho c t o m t danh sách cho phép l a ch n nhi u ph n t cùng m t lúc: public List(intặ ạ ộ ự ọ ề ầ ử ộrows, boolean multiMode)

S d ng danh sách ch n: ử ụ ọ

Đ a t ng ph n vào danh sách b ng l nh add(String item).vd: list.add("Mau do");ư ừ ầ ằ ệ

Chèn m t ph n t vào danh sách b ng phộ ầ ử ằ ương th c add(String item, int index), index làứ

Tr v v trí c a ph n t đả ề ị ủ ầ ử ược ch n, n u không có ph n t nào đọ ế ầ ử ược ch n thì giá trọ ị

s là -1: getSelectedIndex() N u đẽ ế ược ch n nhi u thì dùng: int[] getSelectedIndex()ọ ề

L y ra ph n t đấ ầ ử ược ch n: getSelectedItem() Ch n nhi u thì dùng: String[]ọ ọ ềgetSelectedItem()

Đ ch n m t ph n t mà ta bi t v trí: select(int index)ể ọ ộ ầ ử ế ị

N u ph n t đang tr ng thái ch n chuy n sang tr ng thái bình thế ầ ử ở ạ ọ ể ạ ường: deselect(intindex)

Tr ng thái c a m t ph n t : isSelected(int index)ạ ủ ộ ầ ử

Chuy n ch đ đ n ch n sang đa ch n: setMultiplesSelections(boolean bl)ể ế ộ ơ ọ ọ

Cho bi t m t danh sách là đ n ch n hay đa ch n: boolean isMultipleMode().ế ộ ơ ọ ọ

S d ng đ i tử ụ ố ượng danh sách:

Cài đ t giao ti p ItemListener đ t o đ i tặ ế ể ạ ố ượng bi t l ng nghe s thay đ i tr ng tháiế ắ ự ổ ạ

c a các ph n t trong danh sách.ủ ầ ử

S d ng đ i s ItemEvent trong phử ụ ố ố ương th c itemStateChange đ bi t đứ ể ế ược ch s c aỉ ố ủ

ph n t đang thay đ i tr ng thái ầ ử ổ ạ

Đ x lý để ử ược tình hu ng nh p đôi chu t, ta cài đ t giao ti p ActionListener và g n nóố ấ ộ ặ ế ắvào danh sách

Phương th c getActionCommand() trong ActionEvent s tr v tên c a ph n t bứ ẽ ả ề ủ ầ ử ị

public class ListTest extends JFrame {

private JList colorList;

private Container container;

private String colorNames[] = { "Black", "Blue", "Cyan", "Dark Gray", "Gray", "Green",

"Light Gray", "Magenta", "Orange", "Pink", "Red", "White", "Yellow" };

Trang 12

private Color colors[] = { Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow };

// thêm m t JScrollPane ch a danh sáchộ ứ

container.add( new JScrollPane( colorList ) );

// đ t l ng nghe s ki nặ ắ ự ệ

colorList.addListSelectionListener( new ListSelectionListener() {

public void valueChanged( ListSelectionEvent event )

• Kh i t o m t ô văn b n không xác đ nh kích thở ạ ộ ả ị ước: public TextField();

• T o m t ô văn b n hi n th t i thi u numCols ký t :ạ ộ ả ể ị ố ể ự public TextField(int numCols);

125

Trang 13

• T o m t ô văn b n v i n i dung là m t chu i cho trạ ộ ả ớ ộ ộ ỗ ước: public TextFiled(StringinitText);

• T o ô văn b n k t h p: public TextField(String initText, int numCols);ạ ả ế ợ

• T o vùng văn b n:ạ ả

• T o vùng văn b n r ng, kích thạ ả ỗ ước b t kỳ: public TextArea();ấ

• T o m t vùng văn b n v i n i dung cho trạ ộ ả ớ ộ ước: public TextArea(StringinitiaText);

• T o m t vùng văn b n v i s c t và s dòng đ nh trạ ộ ả ớ ố ộ ố ị ước: public TextArea(introws, int cols);

• T o m t vùng văn b n v i s dòng s c t và n i dung cho trạ ộ ả ớ ố ố ộ ộ ước: publicTextArea(String st, int rows, int cols)

Đ c đi m chung c a các thành ph n văn b n ặ ể ủ ầ ả :

Hai l p này đớ ược d n xu t t l p TextComponentẫ ấ ừ ớ

Mu n đ a n i dung văn b n vào các đ i tố ư ộ ả ố ượng này ta s d ng phử ụ ương th c setText:ứpublic void setText(String newText);

L y n i dung văn b n trong các đ i tấ ộ ả ố ượng: public String getText();

L y n i dung văn b n đấ ộ ả ược đánh d u: public String getSelectedText();ấ

Đ xác đ nh xem v trí đánh d u kh i văn b n b t đ u và k t thúc đâu: public intể ị ị ấ ố ả ắ ầ ế ởgetSelectionStart(); //đ uầ

public int getSelectionEnd(); //cu iố

Đánh d u toàn b văn b n: public void selectAll();ấ ộ ả

Cho phép so n th o đạ ả ược: public void setEditable(boolean canEdited); canEdited =

canEdited = true: thêm, s đử ược

Xác đ nh đ i tị ố ượng đang trang thái nào: public boolean isEditable();ở

Đ c đi m riêng c a TextField: ặ ể ủ

Đ t ký t hi n th cho ký t nh p vào: public void setEchoChar(Char ch); ví d :ặ ự ể ị ự ậ ụ myTextField.setEchoChar('*'); //mã mKh uẩ

Xác đ nh xem ký t làm ký t hi n th : public char getEchoChar();ị ự ự ể ị

Xác đ nh chi u dài c a ô văn b n theo ký t : public int getColums();ị ề ủ ả ự

Đ c đi m riêng c a đ i tặ ể ủ ố ượng TextArea:

Đ a thêm m t dòng văn b n vào đ i tư ộ ả ố ượng: public void appendText(String newText);

Chèn m t chu i văn b n vào v trí b t kỳ: public void insertText(String newText, intộ ỗ ả ị ấpos);

Xác đ nh kích thị ước hi n th :ể ị public int getRows(); public int getColums();

S d ng đ i tử ụ ố ượng TextField và TextArea:

Mu n l y n i dung văn b n c a đ i tố ấ ộ ả ủ ố ượng, ta thi t l p ActionListener đ g n đ iế ậ ể ắ ố

tượng x lý tình hu ng vào văn b n TextField Khi ngử ố ả ười dung nh n Enter thì tình hu ngấ ố

được g i.ọ

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class TextFieldTest extends JFrame {

private JTextField textField1, textField2, textField3;

private JPasswordField passwordField;

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

HÌNH ẢNH LIÊN QUAN

M t giao d in ng ộệ ười dùng được hình thàn ht các ph nt ca GUI. Mt ph nt GUI ử đ ược thi t l p b ng cách s  d ng các th  t c:ế ậằử ụủ ụ - Lập trình giao diện đồ họa GUI
t giao d in ng ộệ ười dùng được hình thàn ht các ph nt ca GUI. Mt ph nt GUI ử đ ược thi t l p b ng cách s d ng các th t c:ế ậằử ụủ ụ (Trang 1)
Đa đi tư ố ượng JDialog ra màn hình b ng p hằ ương th c show(). ứ Gi u c a s  JDialog ta dùng ph ấử ổương th c: hide().ứ - Lập trình giao diện đồ họa GUI
a đi tư ố ượng JDialog ra màn hình b ng p hằ ương th c show(). ứ Gi u c a s JDialog ta dùng ph ấử ổương th c: hide().ứ (Trang 3)
• GridLayout: tom t khung lạ ộ ưới vô hình vi các ôb ng nhau, các đi ằố ượng sẽ đ t v a kích th ặ ừước v i các ô đó.ớ - Lập trình giao diện đồ họa GUI
rid Layout: tom t khung lạ ộ ưới vô hình vi các ôb ng nhau, các đi ằố ượng sẽ đ t v a kích th ặ ừước v i các ô đó.ớ (Trang 19)

TỪ KHÓA LIÊN QUAN

w