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
686,65 KB
Nội dung
Đề 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 Java cung cấp cho lập trình viên 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 hình thành từ phần tử c GUI M ột phần t GUI thiết lập cách sử dụng thủ tục: Tạo đối tượng Xác định xuất ban đầu đối tượng Chỉ nằm đâu Thêm phần tử vào giao diện hình Để làm việc với đối tượng GUI cần nhập gói java.awt.* AWT cung cấp thành phần khác để tạo GUI hiệu quả, thành phần 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) tính vẽ (draw) • Phông chữ (Font) • Sự kiện (Event) Từ phiên 1.4, Java phát triển thư viện mở rộng m ới với đa số lớp GUI k ế thừa từ AWT có khả di động tốt Các lớp GUI swing có thêm ti ền t ố “J” so với lớp AWT Sau đây, xét thành phần GUI swing Sơ đồ phân cấp thừa kế đối tượng GUI swing sau: 114 II Vật chứa (Container) Là vùng mà ta đặt thành phần (component) c giao di ện M ột v ật ch ứa chứa nhiều phần tử Vật chứa thường sử dụng là: • JPanel - khung chứa đơn giản nhất, để nhóm đối tượng lại xếp theo cách thích hợp • JFrame - cửa sổ ứng dụng windows, để t ạo ứng d ụng windows • JDialogs - cửa sổ không đầy đủ chức Frame, c ửa s ổ hộp thoại đưa lời thơng báo • JScrollPanel - khung chứa Panel có hai trượt II.1 JFrame Tạo đối tượng khung chứa JFrame 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); } } Một số phương thức hay sử dụng: • Đặt lại kích thước cho JFrame: frame1.setSize(int width, int height); • Đưa cửa sổ hình: frame1.show(); frame1.setVisible(boolean b); đó: b = true cho hi ển th ị, b = false cho ẩn • Bỏ hồn tồn đối tượng JFrame: frame1.dispose(); • Thay đổi tiêu đề cho JFrame: frame1.setTitle(String newTitle); • Lấy tiêu đề JFrame: public String getTitle(); • Co dãn JFrame: public void setResizable(boolean b); đó: b = true Frame thay đổi kích thước, b = false khơng đổi • Xác định JFrame tình trạng nào: public boolean isResizable(); • Thay đổi biểu tượng JFrame: public setIconImage(Image img); II.2 JPanel JPanel nhìn thấy trực tiếp, đối tượng dùng để chứa thành ph ần GUI hình Do cần gắn JPanel vào đối tượng nh ư: JFrame, JApplet, Tạo khung chứa JPanel phương thức khởi tạo: JPanel panel1 = new JPanel(); 115 Ví dụ sau tạo đối tượng JPanel đặt vào đố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(); p.add(new JButton("OK")); f.add(p); // gắn JPanel vào JFrame f.setSize(400,400); f.setVisible(true); } } II.3 JDialog Như JFrame, chức hơn, cịn gọi popup-window Ta tạo JDialog hai hình thức: • modal: cửa sổ JDialog thực khoá chặt cửa sổ khác Cửa sổ thường yêu cầu tác vụ cần phải hồn thành • non-modal: ngược lại với modal, cửa sổ thích ứng v ới 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); đó: isModal - định xem JDialog tạo d ạng nào: isModal = true cho modal 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 gắn với Applet, muốn đưa m ột JDialog t JApplet ta ph ải t ạo JFrame giả tạo Đưa đối tượng JDialog hình phương thức show() Giấu cửa sổ JDialog ta dùng phương thức: hide() Ẩ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ể tương tự với JFrame Lấy thay đổi kích thước JDialog: public setResizable(boolean), boolean isResizable() Đặt lấy tiêu đề JDialog: void setTitle(String), String getTitle(); Xác minh JDialog thuộc dạng ta gọi ph ương th ức: public boolean isModal() Chương trình sau ẩn Jdialog vào nút bấm: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class FrameSample extends JFrame { private JDialog d; 116 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()); } } ); p.add(b); add(p); } public static void main(String[] argvs) { FrameSample fs = new FrameSample(); fs.setSize(400,400); fs.setVisible(true); } } 117 II.4 JScrollPane Đây cửa sổ có tính chất khung chứa JPanel dùng để chứa đối tượng Tính chất khác đối tượng chứa q l ớn JScrollPane s ẽ xu ất hi ện trượt đứng ngang hai bên viền để ta xem tồn JScrollPane đ ược ứng dụng danh sách chọn III Giới thiệu thành phần GUI • • • • • • • Jlabel: Chỉ vùng hiển thị văn icon JtextField: Chỉ đối tượng cho phép nhập liệu từ bàn phím JButton: Đối tượng nút bấm JcheckBox: Đối tượng nút chọn JcomboBox: Đối tượng ComboBox Jlist: Danh sách JPanel: Nơi đặt thành phần GUI nói III.1 Nút nhấn Cách tạo nút nhấn Ta gọi phương thức khởi dựng: public Button(String label) label tên nhãn c nút nhấn Ví dụ: Button nutOK = new Button("OK"); Đư nút nhấn vào Applet hay cửa sổ chương trình 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 nút nhấn, ta gọi phương thức public String getLabel() Ví dụ: Button nutOK = new Button(); nutOK.setLabel("OK"); Sử dụng nút nhấn Khi kích chuột vào nút nhấn thực cơng vi ệc Vấn đ ề xem xét phần xử lý kiện III.2 Nhãn (Label) Tạo nhãn khơng có nội dung gì: public Label() ho ặc tạo nhãn có n ội dung: public Label(String nameLabel) thêm chế độ lề: pubic Label(String name, int align) Một số phương thức hay sử dụng: setText(String nameLabel): Đặt lại nội dung cho nhãn Label.CENTER, Label.LEFT, Label.RIGHT: giá trị lề Lấy nội dung hành nhãn: public String getText(); Xem nhãn lề chế độ nào: public int getAlignment(); Thiết lập lại chế độ lề: public void setAlignment(int align) throws IlligalArgumentException Sau ví dụ sử dụng JLabel: // Minh họa JLabel // Nhập gói thư viện import java.awt.*; 118 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 JFrame // Lấy đối tượng pane JFrame Container container = getContentPane(); container.setLayout( new FlowLayout() ); // constructor JLabel label1 = new JLabel( "Label with text" ); label1.setToolTipText( "This is label1" ); // hiển thị di chuột đến container.add( label1 ); // thêm vào container // Tạo Jlabel với icon 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" ); label3.setIcon( bug ); label3.setHorizontalTextPosition( SwingConstants.CENTER ); label3.setVerticalTextPosition( SwingConstants.BOTTOM ); label3.setToolTipText( "This is label3" ); container.add( label3 ); setSize( 275, 170 ); setVisible( true ); } // hàm main public static void main( String args[] ) { LabelTest application = new LabelTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } 119 } III.3 Nút đánh dấu (checkbox) Một nút đánh dấu có hai phần: nhãn dấu biểu trạng thái Ta tạo nút đánh dấu theo 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 • 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 đ ược nhóm nhóm g Nhóm đánh dấu trở thành nút chọn Kiểm tra thiết lập trạng thái: Để kiểm tra ô 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 ô đá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) 120 // 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; // Thiết lập GUI public CheckBoxTest() { super( "JCheckBox Test" ); // lấy pane Container container = getContentPane(); container.setLayout( new FlowLayout() ); // Đặt ô nhập font chữ field = new JTextField( "Theo dõi font chữ thay đổi", 20 ); field.setFont( new Font( "Serif", Font.PLAIN, 14 ) ); container.add( field ); // tạo đối tượng checkbox bold = new JCheckBox( "Bold" ); container.add( bold ); italic = new JCheckBox( "Italic" ); container.add( italic ); // Đăng ký đối tượng lắng nghe CheckBoxHandler handler = new CheckBoxHandler(); bold.addItemListener( handler ); italic.addItemListener( handler ); setSize( 275, 100 ); setVisible( true ); } // execute application public static void main( String args[] ) { CheckBoxTest application = new CheckBoxTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } // Lớp nội lắng nghe kiện private class CheckBoxHandler implements ItemListener { private int valBold = Font.PLAIN; private int valItalic = Font.PLAIN; // Đáp ứng kiện chọn ô public void itemStateChanged( ItemEvent event ) { // xử lý chọn ô chữ đậm if ( event.getSource() == bold ) if ( event.getStateChange() = = ItemEvent.SELECTED ) valBold = Font.BOLD; else valBold = Font.PLAIN; // Chọn ô nghiêng if ( event.getSource() == italic ) 121 III.4 Nút chọn (radio button) Tạo nút chọn: Đây trường hợp đặc biệt ô đánh dấu Ta tạo ô đánh dấu đ ặt vào m ột nhóm, ta có phương thức sau: public CheckboxGroup(); Với nhóm nút ta lấy đối tượng hi ện t ại đ ược ch ọn b ằng cách gọi phương thức getSelectedCheckbox() Đặt lựa chọn ta dùng: setSelectedCheckbox() Cách sử dụng nút chọn: Ta tạo đối tượng giao tiếp ItemListener để lắng nghe tình Phương thức getItemSelectable trả đối tượng nơi mà tình hu ống phát sinh: public ItemSelectable getItemSelectable(); Phương thức getItem đối tượng ItemEvent cho ta bi ết giá tr ị nút ch ọn: public Object getItem(); Sau ví dụ sử dụng ô chọn: // Đăng ký đối tượng lắng nghe cho ô chọn radio RadioButtonHandler handler = new RadioButtonHandler(); plainButton.addItemListener( handler ); boldButton.addItemListener( handler ); italicButton.addItemListener( handler ); boldItalicButton.addItemListener( handler ); // Nhóm lại radioGroup = new ButtonGroup(); radioGroup.add( plainButton ); radioGroup.add( boldButton ); radioGroup.add( italicButton ); radioGroup.add( boldItalicButton ); Về bắt kiện tương tự ô đánh dấu III.5 Hộp thoại Combo Java hỗ trợ hộp thoại Combo thông qua đối tượng class JComboBox Đây m ột danh sách xổ xuống, đưa danh sách mục ta ch ỉ đ ược ch ọn m ục JComboBox phát sinh kiện ItemEvent giống JRadioButton JCheckBox Chương trình sau minh họa việc sử dụng JComboBox v ới ph ần t ả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; 122 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])}; // Thiết lập GUI public ComboBoxTest() { super( "Testing JComboBox" ); // Đặt layout Container container = getContentPane(); container.setLayout( new FlowLayout() ); // khởi tạo combo imagesComboBox = new JComboBox( names ); imagesComboBox.setMaximumRowCount( ); imagesComboBox.addItemListener( new ItemListener() { // bắt kiện public void itemStateChanged( ItemEvent event ) { // liệu có phần tử chọn if ( event.getStateChange() == ItemEvent.SELECTED ) label.setIcon( icons[imagesComboBox.getSelectedIndex() ] ); } } ); container.add( imagesComboBox ); // đặt JLabel hiển thi ImageIcons tương ứng label = new JLabel( icons[ ] ); container.add( label ); setSize( 350, 100 ); setVisible( true ); } // hàm main public static void main( String args[] ) { ComboBoxTest application = new ComboBoxTest(); aplication.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }} III.6 Danh sách (Lists) Lớp List cho phép ta tạo danh sách phần tử cho ta lựa chọn 123 Tạo danh sách: Phương thức khởi dựng mặc định: public List() vd: List list = new List(); để định phần tử hiển thị m ột lúc danh sách: public List(int rows) tạo danh sách cho phép lựa chọn nhiều phần tử lúc: public List(int rows, boolean multiMode) Sử dụng danh sách chọn: Đưa phần vào danh sách lệnh add(String item).vd: list.add("Mau do"); Chèn phần tử vào danh sách phương thức add(String item, int index), index vị trí phần tử mà ta muốn chèn Thay phần tử vị trí pos phần tử mới: replaceItem(String newItem, int pos) vd: list.replaceItem("Xanh", 4); Loại bỏ phần tử danh sách ta dùng phương thức remove(int pos) Loại bỏ hết danh sách: removeAll() Trả vị trí phần tử chọn, khơng có phần tử đ ược ch ọn giá tr ị -1: getSelectedIndex() Nếu chọn nhiều dùng: int[] getSelectedIndex() Lấy phần tử chọn: getSelectedItem() Chọn nhiều dùng: String[] getSelectedItem() Để chọn phần tử mà ta biết vị trí: select(int index) Nếu phần tử trạng thái chọn chuyển sang trạng thái bình thường: deselect(int index) Trạng thái phần tử: isSelected(int index) Chuyển chế độ đơn chọn sang đa chọn: setMultiplesSelections(boolean bl) Cho biết danh sách đơ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 thay đ ổi tr ạng thái phần tử danh sách Sử dụng đối số ItemEvent phương thức itemStateChange để biết số phần tử thay đổi trạng thái Để xử lý tình nhấp đơi chuột, ta cài đặt giao ti ếp ActionListener gắn vào danh sách Phương thức getActionCommand() ActionEvent trả tên c phần tử b ị nhấp // Java core packages import java.awt.*; // Java extension packages import javax.swing.*; import javax.swing.event.*; 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" }; 124 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 }; // Thiết lập GUI public ListTest() { super( "List Test" ); // lấy layout container = getContentPane(); container.setLayout( new FlowLayout() ); // Tạo danh sách colorList = new JList( colorNames ); colorList.setVisibleRowCount( ); // Không cho chọn nhiều colorList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION ); // thêm JScrollPane chứa danh sách container.add( new JScrollPane( colorList ) ); // đặt lắng nghe kiện colorList.addListSelectionListener( new ListSelectionListener() { public void valueChanged( ListSelectionEvent event ) { container.setBackground( colors[ colorList.getSelectedIndex() ] ); } } ); setSize( 350, 150 ); setVisible( true ); } // hàm main public static void main( String args[] ) { ListTest application = new ListTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }} III.7 Ô văn (text field) vùng văn (text areas) Tạo văn bản: • Khởi tạo văn khơng xác định kích thước: • Tạo ô văn hiển thị tối thiểu numCols ký tự: numCols); public TextField(); public TextField(int 125 • Tạo ô văn với nội dung chuỗi cho trước: public TextFiled(String initText); • Tạo vă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 rỗng, kích thước bất kỳ: public TextArea(); • Tạo vùng văn với nội dung cho trước: public TextArea(String initiaText); • Tạo vùng văn với số cột số dịng định tr ước: public TextArea(int rows, int cols); • Tạo vùng văn với số dòng số cột nội dung cho tr ước: public TextArea(String st, int rows, int cols) Đặc điểm chung thành phần văn bản: Hai lớp dẫn xuất từ lớp TextComponent Muốn đưa nội dung văn vào đối tượng ta sử dụng phương th ức setText: public void setText(String newText); Lấy nội dung văn đối tượng: public String getText(); Lấy nội dung văn đánh dấu: public String getSelectedText(); Để xác định xem vị trí đánh dấu khối văn bắt đầu k ết thúc đâu: public int getSelectionStart(); //đầu public int getSelectionEnd(); //cuối Đánh dấu toàn văn bản: public void selectAll(); Cho phép soạn thảo được: public void setEditable(boolean canEdited); canEdited = false: đọc canEdited = true: thêm, sử Xác định đối tượng trang thái nào: public boolean isEditable(); Đặc điểm riêng 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 ô văn theo ký tự: public int getColums(); Đặc điểm riêng đối tượng TextArea: Đưa thêm dòng văn vào đối tượng: public void appendText(String newText); Chèn chuỗi vă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 TextArea: Muốn lấy nội dung văn đối tượng, ta thi ết lập ActionListener đ ể gắn đ ối tượng xử lý tình vào văn TextField Khi người dung nh ấn Enter tình hu ống 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; 126 // Thiết lập giao diện GUI public TextFieldTest() { super( "Testing JTextField and JPasswordField" ); // constructor JFrame Container container = getContentPane(); container.setLayout( new FlowLayout() ); // ô nhập với kích thước mặc định textField1 = new JTextField( 10 ); container.add( textField1 ); // ô nhập với văn có sẵn textField2 = new JTextField( "Enter text here" ); container.add( textField2 ); // ô nhập không cho phép nhập, hiên thị thông tin textField3 = new JTextField( "Uneditable text field", 20 ); textField3.setEditable( false ); container.add( textField3 ); // ô nhập password passwordField = new JPasswordField( "Hidden text" ); container.add( passwordField ); // Đăng ký lắng nghe kiện TextFieldHandler handler = new TextFieldHandler(); textField1.addActionListener( handler ); textField2.addActionListener( handler ); textField3.addActionListener( handler ); passwordField.addActionListener( handler ); setSize( 325, 100 ); setVisible( true ); } // hàm main public static void main( String args[] ) { TextFieldTest application = new TextFieldTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } // Lớp nội cho lắng nghe kiện private class TextFieldHandler implements ActionListener { // phương thức xử lý kiện public void actionPerformed( ActionEvent event ) { String string = ""; // người dùng ấn enter 127 if ( event.getSource() == textField1 ) string = "textField1: " + event.getActionCommand(); // user pressed Enter in JTextField textField2 else if ( event.getSource() == textField2 ) string = "textField2: " + event.getActionCommand(); // user pressed Enter in JTextField textField3 else if ( event.getSource() == textField3 ) string = "textField3: " + event.getActionCommand(); // user pressed Enter in JTextField passwordField else if ( event.getSource() == passwordField ) { JPasswordField pwd = ( JPasswordField ) event.getSource(); string = "passwordField: " + new String( passwordField.getPassword() ); } JOptionPane.showMessageDialog( null, string ); // Hiên thị cửa sổ thông báo } } } III.8 Thanh trượt (Scrollbar) Ta đặt trượt giá trị giới hạn tối thiểu (min) tối đa (max) v ới v ị trí trượt Khi người dùng kích chuột vào mũi tên hai đầu tình hu ống line n ảy sinh, trượt tự động cộng thêm hay trừ đơn vị Tình page nảy sinh người dùng kích chuột vào khoảng gi ữa tr ượt, v ị trí hành thay đổi Tình absolute nảy sinh người dùng nắm vào vị trí hành tr ượt kéo Đối tượng Scrollbar chịu trách nhiệm di chuyển cung cấp cho ta giá trị thay đổi Tạo trượt: Phương thức khởi tạo: public Scrollbar(); Tạo trượt đứng hay ngang ta dùng: public Scrollbar(int orienttation); orienttation nhận giá trị Scrollbat.VERTICAL - cho đứng, Scrollbar.HORIZONTAL cho nằm ngang Tạo trượt có đầy đủ thơng số ban đầu: public Scrollbar(int orienttation, int pos, //vị trí khởi đầu int pageUnit, //bước nhảy int minValue, //giá trị int maxValue); //giá trị max Một số phương thức hay dùng: Thay đổi giá trị tăng giảm (mặc định 1): public void setUnitIncrement(int increment); Muốn biết thời tăng giảm bao nhiêu: public int getUnitIncrement() 128 Chỉ định số tình page xảy ra: pubic void setBlockIncrement(int b); Muốn biết thời đơn vị thay đổi bao nhiêu: public int getBlockIncrement(); Lấy giá trị lớn nhỏ nhất: public int getMaximum(); public int getMinimum(); Đặt lại vị trí hành cho trượt: public void setValue(int newPos); Cho ta vị trí hành: public int getValue(); Muốn biết trượt đứng hay ngang: public int getOrientation() trả v ề giá tr ị m ột hai số Scrollbar.VERTICAL Scrollbar.HORIZONTAL Thiết lập lại thông số cho trượt: public void setValues(int position, int pageUnit, int minimum, int maximum); ví dụ: myScrollbar.setValues(75, 10, 0, 500); Sử dụng trượt: Ta nhờ đối tượng xử lý tình xử lý: public void adjustmentValueChanged(AdjustmentEvent evt); Có trạng thái: line, page absolute Ta sử dụng hàm getAdjustmentType() đ ể xác định xem tình xảy AdjustmentEvent.UNIT_INCREMENT: tình line xảy ra, v ị trí tr ượt tăng đơn vị AdjustmentEvent.UNIT_DECREMENT: tình line xảy ra, v ị trí tr ượt gi ảm đơn vị AdjustmentEvent.BLOCK_INCREMENT: tình page xảy ra, vị trí hi ện hành tăng đv AdjustmentEvent.Track: tình absolute xảy ra, ta lấy vị trí tr ượt b ằng hàm getValue() IV Thành phần Menu Lớp JMenuBar cài đặt thực đơn chứa th ực đ ơn pull-down Các JMenuBar tạo để gắn vào sổ JFrame lệnh gọi: JMenuBar menuBar = new JMenuBar(); JFrame frm = new JFrame(“Day la mot Frame”); frm.setJMenuBar(menuBar); // MenuBar chưa có phần tử Sau có MenuBar, ta cần thêm vào JMenu m ục Menu, người dùng chọn vào sổ xuống danh sách mục chọn khác JMenu file = new JMenu(“File”); Ta đặt cho phím tắt, ví dụ ‘F’ để ấn Alt + F JMenu đ ược kích hoạt: file.setMnemonic('F'); Sau thêm vào JMenuBar: menuBar.add(file); Bây gời lúc ta cài đặt mục chọn m ột JMenu Java dùng l ớp JMenuItem đ ịnh nghĩa mục thực đơn JMenuItem open = new JMenuItem(“Open”,’O’); Ở ta gọi constructor với tham số nhãn mục chọn, tham số ký tự phím tắt Sau ta add vào JMenu: file.add(open); Nếu ta cần biểu diễn dòng kẻ ngang để phân tách mục ch ọn ta có th ể g ọi phương thức addSeparator() đối tượng JMenu: file.addSeparator(); 129 Lớp JPopUpMenu biểu diễn cho thực đơn pop-up Những thực đơn có th ể xu ất vị trí cửa sổ Lớp JCheckBoxMenuItem chứa mục chọn để kiểm tra m ục th ực đơn Tạo trình đơn: JMenuBar myMenubar = new JMenuBar(); Đặt trạng thái cho mục chọn sử dụng enable() disable(): Vi dụ: openItem.enable(); //được chọn openItem.disable(); //mờ mục chọn Ta dùng đường phân cách để tách mục chọn: FileMenu.addSeparator(); Tạo mục chọn có chứa menu khác, ta tạo m ột menu bình th ường r ồi đ ưa vào menu có Ví dụ: //tạo mục chọn có menu JMenu printItem = new JMenu("Print"); //tạo mục chọn cho menu printItem.add("Print preview"); printItem.add("to preview"); //đưa mục chọn có menu vào menu FileMenu.add(printItem); Tạo mục chọn có khả đánh dấu (check Item), dấu kiểm tra (check mark) bên trái mục chọn: Mục đánh dấu: CheckboxMenuItem Autosave = new CheckboxMenuItem("Auto save"); FileMenu.add(Autosave); Xác định xem mục chọn Autosave trạng thái nào, ta dùng: Autosave.getState(); Khi sử dụng, để mục chọn tương tác nhận kiện ta cần cài đặt giao di ện ActionListener gắn vào mục chọn Sau ví dụ xây dựng JFrame với menu m ục ch ọn có cài đặt xử lý kiện import javax.swing.*; import java.awt.*; import java.awt.event.*; class MenuBarSample extends JFrame { //Khai bao mot hop thoai JOptionPane op = new JOptionPane(); // Khai bao mot thuc don pop-up JPopupMenu jp; public MenuBarSample() { // Lay ve doi tuong chua cua Frame hien tai Container pane = this.getContentPane(); // Dat kieu trinh bay pane.setLayout(new FlowLayout(FlowLayout.LEADING)); // Khai bao mot menu JMenuBar menuBar= new JMenuBar(); // Khai bao muc File menu JMenu menuFile= new JMenu("File");menuBar.add(menuFile); 130 // Dat ky tu kich hoat tat cung Alt menuFile.setMnemonic('F'); // Khai bao mot muc chon voi phim tat O JMenuItem fileOpen = new JMenuItem("Open",'O'); // Them muc chon vao muc File menuFile.add(fileOpen); // Them mot muc chon khac voi phim tat N menuFile.add(new JMenuItem("New",'N')); // Them dong ngan cach menuFile.addSeparator(); // Them mot muc chon co ten Save menuFile.add("Save"); // Xu ly su kien chon muc Open fileOpen.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { // Hien thi thong bao, getContentPane() de lay Container cua Frame op.showMessageDialog(getContentPane(),"Ban vua chon Open"); } } ); // Xu ly su kien chon New menuFile.getItem(1).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { op.showMessageDialog(getContentPane(),"Ban vua chon New"); } } ); // Xu ly su kien chon Save menuFile.getItem(3).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { op.showMessageDialog(getContentPane(),"Ban vua chon Save"); } } ); // Khai bao mot muc chon kieu checkbox JCheckBoxMenuItem chk = new JCheckBoxMenuItem("is editting"); // Them phan xu ly su kien chon hay khong chon cho no chk.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { // Lay ve doi tuong nguon su kien va ep kieu JCheckBoxMenuItem ck = (JCheckBoxMenuItem)e.getSource(); if (ck.isSelected()) 131 //Neu duoc chon op.showMessageDialog(getContentPane(),"Ban vua chon is editting"); else // Neu khong duoc chon op.showMessageDialog(getContentPane(),"Ban vua bo chon is editting"); } } ); // Them muc chon checkbox vao menu File menuFile.add(chk); // Dat Menu cho Frame la doi tuong menuBar this.setJMenuBar(menuBar); // Cap phat bo nho cho popup menu jp = new JPopupMenu("Popup"); jp.add("Create"); jp.addSeparator(); jp.add("New Document"); this.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { if( (e.getModifiers() & InputEvent.BUTTON3_MASK)== InputEvent.BUTTON3_MASK) jp.show(getContentPane(),e.getX(),e.getY()); } } ); } public static void main(String[] argvs) { MenuBarSample m = new MenuBarSample(); m.setSize(300,400); m.setVisible(true); } } V Bộ quản lý cách trình bày (Layout Manager) Dùng để xếp chỗ định vị cho đối tượng GUI Có cách trình bày: • FlowLayout: xếp đối tượng từ trái qua phải từ xuống d ưới Các đối tượng giữ ngun kích thước • GridLayout: tạo khung lưới vơ hình với nhau, đối tượng đặt vừa kích thước với • BorderLayout: Các đối tượng đặt theo đường viền khung chứa theo cạnh West, East, South, Nort Center • CardLayout: Các đối tượng đặt vừa vặn với khung chứa n ằm ch ồng lên 132 • GridBadLayout: đối tượng khung chứa đ ưa vào c khung lưới vơ hình, kích thước đối tượng không thiết ph ải v ừa ô Muốn áp dụng ta tạo đối tượng chuyển cho khung chứa Ví du: FlowLayout objectsLayout = new FlowLayout(); myWindow.setLayout(objectsLayout); hay viết gọn hơn: myWindow.setLayout(new FlowLayout()); V.1 Cách trình bày FlowLayout: Tạo đối tượng FlowLayout, ta sử dụng phương thức: public FlowLayout(); định cách lề phương thức khởi tạo: public FlowLayout(int align); align FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER ho ặc ch ỉ kho ảng đối tượng hàng: public FlowLayout(int align, int hgap, int vgap); V.2 Cách trình bày GridLayout: Phương thức khởi tạo: public GridLayout(int Rows, int Cols); Ví dụ: GridLayout layout = new GridLayout(3, 2); Xác định khoảng cách đối tượng quản lý: public GridLayout(int Rows, int Cols, int hgap, int vgap); V.3 Cách trình bày BorderLayout Đối tượng đặt theo đường viền khung chứa, theo cạnh khung Tạo quản lý kiểu BorderLayout: public BorderLayout(); Ví dụ: myWindow.setLayout(new BorderLayout()); Khi đưa đối tượng vào khung chứa, ta phải định hình trước đối tượng đặt đâu: myWindow.add("North", new Button("on Top")); có kiểu: "North", "South", "West", "East", "Center" VI Các hộp thoại VI.1 Hộp thoại thông báo Khi cần đưa thông báo hay hỏi người dùng vấn đ ề nh ận v ề câu tr ả l ời, ta dùng hộp thoại thông báo Java hỗ trợ lớp JOptionPane để ta thực công việc Lớp JOptionPane có phương thức tĩnh sau: Tên phương thức Giá trị trả Ý nghĩa showMessageDialog Khơng có Hiển thị thông báo đợi ấn OK showConfirmDialog Số int Hiển thị thông báo đợi xác nhận Ok hay Cancel showOptionDialog Số int Hiển thị thông báo nhận trả lời từ danh sách chọn showInputDialog Chuỗi Hiển thị thơng báo nhận dịng user nhập vào 133 ... JTextField textField1, textField2, textField3; private JPasswordField passwordField; 126 // Thiết lập giao diện GUI public TextFieldTest() { super( "Testing JTextField and JPasswordField" ); // constructor... javax.swing.*; public class LabelTest extends JFrame { private JLabel label1, label2, label3; // Tạo giao diện GUI public LabelTest() { super( "Testing JLabel" ); // Contructor JFrame // Lấy đối tượng pane... m.setSize(300,400); m.setVisible(true); } } V Bộ quản lý cách trình bày (Layout Manager) Dùng để xếp chỗ định vị cho đối tượng GUI Có cách trình bày: • FlowLayout: xếp đối tượng từ trái qua phải từ