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

Bài giảng Lập trình Java - Chương 4: Lập trình giao diện với Java và Swing

107 80 0

Đ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

Định dạng
Số trang 107
Dung lượng 4,65 MB

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

Nội dung

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 1

Phát triển UD CSDL 2

Chương 4 :

Lập trình giao diện với JAVA & SWING

Trang 4

Cá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 5

Swing Windows: 

JFrame: M t c a s  d ng top­level­window ộ ử ổ ạ 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 6

JFrame

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 7

JFrame

Trang 8

Khai 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 10

JFrame – 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 11

JFrame – 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 12

JFrame – 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 13

JFrame – 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 14

JFrame – 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 15

round(Color.WHITE);

    }

}

Thi t l p icon cho frame ế ậ

Trang 16

f.setVisible(true);}

}

Trang 17

components & IDE sẽ tự động phát sinh mã nguồn tương ứng

Trang 18

JFrame 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 19

JDialog - 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 20

JDialog – 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 21

NameDialog  dlg=new 

NameDialog  (this,  true);

Trang 22

JDialog – 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 23

JDialog – 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 24

JDialog – 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 25

VD3_Dialog(this, true);       

dlg.setValue(jlblResult.getText());

        dlg.setVisible(true);      

jlblResult.setText(dlg.getValue());        

Trang 26

    public String getValue() {        return jtxtValue.getText();    }

    public void setValue(String s) {

    }

    private JLabel jLabel1;

    private JButton jbtnOK;    private JTextField jtxtValue;}

Trang 28

JDesktopPane & JInternalFrame

Trang 29

JDesktopPane & 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 30

JDesktopPane và JInternalFrame

JFrame

JDesktopPane

Trang 31

JDesktopPane & 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 33

JDesktopPane & JInternalFrame – Ví dụ 4

Trang 35

Flow Layout Border Layout Card Layout Grid Layout Grid Bag Layout Box Layout

Group Layout

SWING LAYOUT MANAGER:

Trang 36

Layout 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 37

Mộ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 38

Layout LayoutManager,  LayoutManager2, 

Serializable Grid 

Layout LayoutManager,  Serializable

Grid 

Bag 

Layout

LayoutManager,  LayoutManager2,  Serializable

Box 

Layout LayoutManager,  LayoutManager2, 

Serializable Group 

Layout LayoutManager,  LayoutManager2

Trang 39

FlowLayout

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 40

FlowLayout – 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 41

FlowLayout – 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 43

hGap=5 vGap=5

hGap=10

Trang 44

Border Layout bố trí các Component bên trong Container theo 5 vùng:

"North", "South", "East", "West" ,"Center“.

Trang 45

BorderLayout – 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 46

BorderLayout – Hgap & Vgap

hGap=20

vGap=40

Trang 48

getContentPane().setLayout(null);

    }

}

Trang 49

Card 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 50

CardLayout – 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 1­2");this.jpnCard1.add(this.jbt12);

Trang 53

//jbt22this.jbt22 = new JButton("Button 2­2");this.jpnCard1.add(this.jbt12);

Trang 58

Grid 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 59

GridLayout – 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 60

extends 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 61

GridBag 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 62

Các thuộc tính của GridBagContraints

Trang 64

GroupLayout (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 65

JLabel JButton JTextField JCheckBox JRadioButton JPanel

BASIC SWING COMPONENTS:

JComboBox, JList JTable

JMenu JToolBar JOptionPane JFileChooser

Trang 66

mouseClicked

Trang 68

JButton

Events:

actionPerformed

mousePressed

jButton1 addActionListener (new java.awt.event ActionListener () {

      public void  actionPerformed (java.awt.event.ActionEvent evt) {

Trang 69

Thêm một sự kiện cho control – Netbeans

Trang 70

JTextField

Trang 73

actionPerformed: 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 74

setModel (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 77

        Person 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 78

getElementAt (int index)

remove (int index)

valueChanged

Trang 80

extends 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 81

Sử dụng để gom nhóm các control

Methods:

setBorder (Border border)

add (Component comp)

Events:

mouseClicked

Trang 82

JPanel – Change the border

Methods:

setBorder (Border border)

Trang 83

Swing Menu

Trang 84

JToolBar

Trang 85

Hì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 86

Cá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 87

JTable - 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 89

JTable – Set column width

Trang 90

public 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 92

please !", "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 93

Fill the data on the JTable

SWING & JDBC

Trang 94

Fill data on the JTable

"

,  

" Đ ị a   c h ỉ

"

  }

;         DefaultTableModel 

Trang 95

Fill data on the JTable

      Properties info = 

new  Properties();

      

info.setProperty( "character Encoding" ,  "utf8" );

mu n ố

      Statement statement 

connection.createStatement ();

Trang 96

Fill 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};

Ngày đăng: 11/07/2020, 04:17

TỪ KHÓA LIÊN QUAN