Bài giảng Lập trình Java - Chương 4: Lập trình giao diện với Java và Swing cung cấp cho người học các kiến thức: Giới thiệu về Swing, các thành phần của Swing. Mời các bạn cùng tham khảo nội dung chi tiết.
Trang 1Phát triển UD CSDL 2
Chương 4 :
Lập trình giao diện với JAVA & SWING
Trang 4Các thành phần trong Swing toolkit:
Swing Windows: Chứa các loại cửa sổ hiển thị của
một ứng dụng GUI
Swing Controls: Các control để thiết kế giao diện
Swing Containers: Các control mà dùng để gom
nhóm các control khác.
Swing Menu: Thiết kế menu cho một ứng dụng swing
Trang 5Swing Windows:
JFrame: M t c a s d ng toplevelwindow ộ ử ổ ạ JDialog: M t c a s h p tho i s d ng đ nh p và xu t d li u ộ ử ổ ộ ạ ử ụ ể ậ ấ ữ ệ JInternalFrame : M t c a s trong m t ng d ng MDI ộ ử ổ ộ ứ ụ
Swing Containers:
JDesktopPane JPanel
SWING GUI FORM
Trang 6JFrame
Hình ảnh:
JFrame được sử dụng để làm giao diện chính trong ứng dụng Swing
Hầu hết các ứng dụng Swing được xây dựng từ JFrame
Một JFrame có thể chứa các thành phần khác: button, label, checkbox, … Cách sử dụng: Tạo các lớp thừa kế JFrame để thiết kế giao diện cho ứng dụng
Trang 7JFrame
Trang 8Khai báo lớp kế thừa JFrame
Hàm kh i t o các đ i t ở ạ ố ượ ng giao di n: t o và thi t l p các ệ ạ ế ậ thu c tính cho các control: v ộ ị trí, màu s c, … ắ
Hàm này t phát sinh mã ngu n ự ồ khi s d ng thi t k giao di n ử ụ ế ế ệ kéo th WYSIWYG ả
Một lớp kế thừa từ JFrame có đủ tất cả các thành phần của JFrame (các thuộc tính / phương thức public / protected
Trang 9}
Trang 10JFrame – Một số phương thức thông dụng
public void setDefaultCloseOperation (int operation);
Ý nghĩa: Gán phương thức mặc định khi người dùng đóng Frame
Có 4 lựa chọn (giá trị int operation)
WindowConstants DO_NOTHING_ON_CLOSE
WindowConstants HIDE_ON_CLOSE
WindowConstants DISPOSE_ON_CLOSE
WindowConstants EXIT_ON_CLOSE
Trang 11JFrame – Một số phương thức thông dụng
public void setExtendedState (int state);
Ý nghĩa: Gán trạng thái của JFrame
Có 5 lựa chọn (giá trị int state)
Trang 12JFrame – Một số phương thức thông dụng
public void setResizable (boolean resizable); true: Cho phép thay đổi kích thước
false: không cho phép
public void setTitle (String title);
Gán tựa đề cho JFrame
public void setIconImage (Image image);
Gán hình ảnh Icon cho JFrame
Trang 13JFrame – Một số phương thức thông dụng
public void setSize ( Dimension d);
public void setSize (int width, int height);
Gán kích thước cho JFrame
public void setLocation ( Point p);
public void setLocation (int x, int y);
Gán vị trí cho JFrame
public void setVisible ( boolean visible);
true : hiện Jframe
false : ẩn Jframe
Tương tự cho các phương thức get/is
Trang 14JFrame – Một số phương thức thông dụng
public void dispose ();
Hủy
public Containter getCotentPane()
Lấy vùng Content Pane của Frame (Content pane: vùng chứa các đối tượng trong thiết kế
giao diện của Swing) Mỗi đối tượng JFrame luôn có 1 ContentPane
getContentPane().add : phương thức thường sử dụng để thêm một đối tượng vào JFrame
getContentPane().setBackground(Color c); Thiết lập màu nền cho content pane (frame)
Trang 15round(Color.WHITE);
}
}
Thi t l p icon cho frame ế ậ
Trang 16f.setVisible(true);}
}
Trang 17components & IDE sẽ tự động phát sinh mã nguồn tương ứng
Trang 18JFrame hay JDialog thường sử dụng JDialog nhập liệu hoặc xuất liệu
JDialog có 2 trạng thái
Modal : Khi Jdialog thực hiện xong mới được phép thao tác lên form cha
Modeless : Sau khi hiển thị dialog, người dùng có thể thao tác lên form cha JDialog thường được sử dụng với trạng thái Modal
Trang 19JDialog - Khai báo lớp kế thừa JDialog
this.intComponents();
this.intComponents();
Khai báo k th a t l p ế ừ ừ ớ JDialog
Hàm kh i t o có thêm tham s ở ạ ố
là 1 Frame ho c Dialog ch th ặ ỉ ị cho c a s cha ử ổ
Ph ươ ng th c initComponents ứ
đ kh i t o các thành ph n ể ở ạ ầ giao di n c a dialog ệ ủ
Khai báo d li u và các ữ ệ
ph ươ ng th c get/set đ l y giá ứ ể ấ
tr / truy n giá tr t form cha ị ề ị ừ
Trang 20JDialog – Hiển thị
JFrame hay JDialog thường sử dụng JDialog nhập liệu hoặc xuất liệu
Jdialog thường được thiết lập ở trạng thái Modal, nghĩa là khi Jdialog thực hiện xong mới được phép thao tác lên form cha
Trang 21NameDialog dlg=new
NameDialog (this, true);
Trang 22JDialog – Một số phương thức thông dụng
public void setDefaultCloseOperation (int operation);
Gán phương thức mặc định khi người dùng đóng Frame
Có 3 lựa chọn sau:
WindowConstants.DO_NOTHING_ON_CLOSE WindowConstants.HIDE_ON_CLOSE
WindowConstants.DISPOSE_ON_CLOSE
Trang 23JDialog – Một số phương thức thông dụng
Một số phương thức tương tự JFrame
public void setResizable (boolean resizable); public void setTitle (String title);
public void setBackground (Color c);
public void setForeground (Color c);
public void setIconImage (Image image); public void setSize (Dimension d);
public void setSize (int width, int height); public void setLocation (Point p);
public void setLocation (int x, int y);
public void setVisible (boolean visible);
public void dispose();
public Containter getCotentPane();
Trang 24JDialog – Một số phương thức thông dụng
public void setModal (boolean modal);
true: Modal
false : Modeless
Tương tự cho các phương thức get/is
Trang 25VD3_Dialog(this, true);
dlg.setValue(jlblResult.getText());
dlg.setVisible(true);
jlblResult.setText(dlg.getValue());
Trang 26public String getValue() { return jtxtValue.getText(); }
public void setValue(String s) {
}
private JLabel jLabel1;
private JButton jbtnOK; private JTextField jtxtValue;}
Trang 28JDesktopPane & JInternalFrame
Trang 29JDesktopPane & JInternalFrame
JDesktopPane
JDesktopPane được sử dụng để xây dựng ứng dụng MDI
JDesktopPane thường là một thành phần bên trong JFrame
JDesktopPane thường được sử dụng để chứa các JInternalFrame bên trong
JInternalFrame
JInternalFrame được sử dụng để đưa vào bên trong JDesktopPane của JFrame để xây dựng ứng dụng MDI.
Các bước xây dựng ứng dụng MDI:
Bước 1: Xây dựng một hay nhiều JInternalFrame
Bước 2: Tạo một JFrame có một JDesktopPane bên trong
Bước 3: Gắn JInternalFrame vào bên trong JDesktopPane
Trang 30JDesktopPane và JInternalFrame
JFrame
JDesktopPane
Trang 31JDesktopPane & JInternalFrame– Một số phương thức thông dụng
JDesktopPane:
public void add(Component component);
component : thường là JInternalFrame
public JInternalFrame getSelectedFrame();
Lấy JInternalFrame đang được chọn
public JInternalFrame [] getAllFrames();
Lấy tất cả các JInternalFrame bên trong
JInternalFrame
Tương tự JFrame
Trang 33JDesktopPane & JInternalFrame – Ví dụ 4
Trang 35Flow Layout Border Layout Card Layout Grid Layout Grid Bag Layout Box Layout
Group Layout
SWING LAYOUT MANAGER:
Trang 36Layout Manager
Một Container là một Component có thể chứa các Component khác như là: JFrame,
JDialog, JScollPane, JPanel, JDesktopPane, JInternalFrame
getContentPane().add để thêm Component vào Container
Mỗi Container có một đối tượng Layout Manager
Layout Manager là một đối tượng quyết định cách sắp xếp vị trí của các Component bên trong một Container.
Các Layout Manager “implements” từ interface LayoutManager hoặc LayoutManger2.
Trang 37Một Layout Manager chịu trách nhiệm bố trí các Component được thêm vào Container
và khi Container thay đổi kích thước
Sử dụng phương thức setLayout (LayoutManager mng) của Container để thay đổi cách
bố trí các Component bên trong nó.
Trang 38Layout LayoutManager, LayoutManager2,
Serializable Grid
Layout LayoutManager, Serializable
Grid
Bag
Layout
LayoutManager, LayoutManager2, Serializable
Box
Layout LayoutManager, LayoutManager2,
Serializable Group
Layout LayoutManager, LayoutManager2
Trang 39FlowLayout
Flow Layout bố trí các Component trong Container theo dòng, từ trái sang phải theo thứ tự thêm vào.
Tạo dòng mới khi kích thước dòng còn lại không đủ chứa Component thêm vào.
Flow Layout bố trí vị trí các Component phụ thuộc vào kích thước của Container.
Mỗi dòng của các Component được window mặc định canh giữa theo chiều ngang Có thể điều chỉnh canh trái hoặc phải.
Trang 40FlowLayout – Một số phương thức phổ biến
public FlowLayout (): Phương thức khởi tạo mặc định
align: FlowLayout.CENTER
vgap: 5px, hgap: 5px
public FlowLayout (int align): Phương thức khởi tạo có tham số align: canh lề
FlowLayout.CENTER : Canh giữa
FlowLayout.LEFT; : Canh trái
FlowLayout.RIGHT; : Canh phải
hgap: 5px, vgap: 5px
Trang 41FlowLayout – Một số phương thức phổ biến
public FlowLayout(int align, int vgap, int hgap) Phương thức khởi tạo có tham số
align : canh lề
vgap : kích thước chiều ngang
hgap: chiều dọc
Các phương thức get/set :
public void setAlignment(int align)
public void setHgap(int hgap)
public void setVgap (int vgap)
public int getAlignment()
public int getHgap ()
public int getVgap ()
Trang 43hGap=5 vGap=5
hGap=10
Trang 44Border Layout bố trí các Component bên trong Container theo 5 vùng:
"North", "South", "East", "West" ,"Center“.
Trang 45BorderLayout – Các phương thức thông dụng
public BorderLayout (): Phương thức khởi tạo mặc định
public void setHgap(int hgap)
public void setVgap (int vgap)
public int getHgap()
public int getVgap ()
Trang 46BorderLayout – Hgap & Vgap
hGap=20
vGap=40
Trang 48getContentPane().setLayout(null);
}
}
Trang 49Card Layout quản lý nhiều Card cùng một không gian hiển thị
Card Layout giúp quản lý hai hay nhiều Component (thường là JPanel) để chia sẽ cùng một không gian hiển thị.
Chỉ duy nhất Top Card được hiển thị.
Mỗi “Card” có thể sử dụng Layout Manager riêng.
Card nào cũng có thể là Top Card
Có thể sử dụng JTabbedPane để thay cho Card Layout
Trang 50CardLayout – Một số phương thức thông dụng
public CardLayout (): Phương thức khởi tạo mặc định
public void setHgap(int hgap)
public void setVgap(int vgap)
public int getHgap()
public int getVgap()
Trang 52//jbt12this.jbt12 = new JButton("Button 12");this.jpnCard1.add(this.jbt12);
Trang 53//jbt22this.jbt22 = new JButton("Button 22");this.jpnCard1.add(this.jbt12);
Trang 58Grid Layout bố trí các Component của Container vào bên trong một Grid với các Row và
Column
Mỗi Component được bố trí trong 1 Cell của lưới.
Tất cả các Cell có cùng kích thước bên trong Grid
Các Component được thêm vào Container theo thứ tự từ trái sang phải, từ trên xuống dưới (mặc định).
Kích thước của mỗi Cell được xác định bởi kích thước của Container
Trang 59GridLayout – Một số phương thức thường dùng
public GridLayout(): Phương thức khởi tạo mặc định rows: 1
1 Component / 1 Column
public GridLayout(int rows, int cols)
public GridLayout(int rows, int cols, int hgap, int vgap
Trang 60extends javax.swing.JFrame { private JButton[] jbts;
public
VD8_GridLayoutFrame() { initComponents(); }
private void
initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
GridLayout layout = new GridLayout(7, 3);
this.setLayout(layout); //jbts
this.jbts = new
JButton[21];
for (int i = 0; i < 21; i++) { this.jbts[i] = new
JButton();
this.jbts[i].setText(String.valueOf(i + 1));
this.getContentPane().add(this.jbts[i]);
Trang 61GridBag Layout bố trí các Component trong một Grid với các Row và Column
Mỗi Component bên trong Grid được RowSpan và ColumnSpan (giống table HTML)
Width và Height của các Row/Column có thể khác nhau.
GridBag Layout là một Layout Manager rất linh động cho việc bố trí các Component bên trong
Container theo dạng Grid
GridBag Layout là một trong các Layout Manager thường sử dụng nhất mà Java Platform cung cấp.
Trang 62Các thuộc tính của GridBagContraints
Trang 64GroupLayout (Free Design)
Group Layout bố trí các Component bên trong Container theo chiều ngang và chiều dọc.
Sự bố trí được thực hiện theo mỗi chiều riêng lẽ
Trang 65JLabel JButton JTextField JCheckBox JRadioButton JPanel
BASIC SWING COMPONENTS:
JComboBox, JList JTable
JMenu JToolBar JOptionPane JFileChooser
Trang 66mouseClicked
Trang 68JButton
Events:
actionPerformed
mousePressed
jButton1 addActionListener (new java.awt.event ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent evt) {
Trang 69Thêm một sự kiện cho control – Netbeans
Trang 70JTextField
Trang 73actionPerformed: Sự kiện khi radioButton được nhấn
ButtonGroup group = new ButtonGroup (); group add (birdButton);
group add (catButton);
group add (dogButton);
group add (rabbitButton);
group add (pigButton);
Gom các
radioButton
thành một
nhóm
Trang 74setModel (ComboBoxModel model) getModel ()
getElementAt (int index)
getIndexOf (Object item)
getSelectedItem ()
removeAllItems ()
removeItemAt (int index)
setSelectedItem (int index)
Khởi tạo từ mảng đối tượng
Khởi tạo từ một Vector
Trang 77Person p2 = new Person (2, "B");
Person p3 = new Person (3, "C");
Person[] items = new
Person[] {p1, p2, p3};
DefaultComboBoxModel model = new
DefaultComboBoxModel(items);
model.setSelectedItem(p2);
jComboBox1.setModel(model); }
private void
initComponents() {
jComboBox1 = new
javax.swing.JComboBox();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(ne
w java.awt.FlowLayout());
getContentPane().add(jComboBox1);
Trang 78getElementAt (int index)
remove (int index)
valueChanged
Trang 80extends javax.swing.JFrame { public
VD17_DemoListObject() { initComponents(); Person p1 = new Person(1,
model.addElement(p1); model.addElement(p2);
model.addElement(p3); jList1.setModel(model); }
getContentPane().add(jScrollPane1);
pack();
}
private javax.swing.JList jList1;
private
javax.swing.JScrollPane
jScrollPane1;
}
Trang 81Sử dụng để gom nhóm các control
Methods:
setBorder (Border border)
add (Component comp)
Events:
mouseClicked
Trang 82JPanel – Change the border
Methods:
setBorder (Border border)
Trang 83Swing Menu
Trang 84JToolBar
Trang 85Hình ảnh:
Mỗi table cũng có đối tượng TableModel để quản lý dữ liệu Thường sử dụng DefaultTableModel
Trang 86Các phương thức của DefaultTableModel
addColumn (Object obj)
addRow (Object obj)
getColumnCount ()
getRowCount ()
getValueAt (int row, int col)
setValueAt (Object obj, int row, int col)
Trang 87JTable - DefaultTableModel
Khởi tạo model:
Đưa một dòng dữ liệu vào model
String[] columns = new String [] { "Mã NV", "Họ tên", "Giới tính", "Địa chỉ" };
Trang 89JTable – Set column width
Trang 90public static void showMessageDialog(Component parentComponent, Object message, String title, int messageType)
Trang 91{
//NO }
Option types:
DEFAULT_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTI ON
OK_CANCEL_OPTION Message types:
ERROR_MESSAGE INFORMATION_MESSA GE
WARNING_MESSAGE QUESTION_MESSAGE PLAIN_MESSAGE
Trang 92please !", "Oh, No!"}; int n =
JOptionPane.showOptio nDialog(
this,
"Message" , "Title" ,
JOptionPane YES_NO_O PTION , //Optiont type
JOptionPane QUESTIO N_MESSAGE , //Message type
null,
//Không dùng custom icon
Trang 93Fill the data on the JTable
SWING & JDBC
Trang 94Fill data on the JTable
"
,
" Đ ị a c h ỉ
"
}
; DefaultTableModel
Trang 95Fill data on the JTable
Properties info =
new Properties();
info.setProperty( "character Encoding" , "utf8" );
mu n ố
Statement statement
=
connection.createStatement ();
Trang 96Fill data on the JTable
rs.getInt( "MANV" );
String hoten = rs.getString( "HOTEN" ); String phai =
rs.getString( "PHAI" );
String diachi = rs.getString( "DIACHI" );
Object[] items =
new Object[] {manv, hoten, phai, diachi};