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

LẬP TRÌNH GIAO DIỆN VỚI SWING ppsx

43 685 1

Đ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 Với Swing
Tác giả Vũ Duy Khánh, Đặng Thanh Hà, Nguyễn Đình Thịnh, Nguyễn Duy Hưng
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Lập Trình
Thể loại Bài Tập Nhóm
Định dạng
Số trang 43
Dung lượng 362,46 KB

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

Nội dung

GIAO DIỆN NGƯỜI DÙNG VỚI JAVA + Cung cấp các công cụ cho phép tạo giao tiếp trực quan và hấp dẫn với người dùng,được biết đến là swing + Giao diện với người dùng bao gồm 1 cửa sổ chính v

Trang 1

1.Giới thiệu về Swing

Swing là thư viện lập trình mở rộng của java Nó mở rộng các đối tượng giao diện đồ họa cơbản của java Swing còn được gọi là thư viện JEC (Java Foundations Class) Khi muốn sử dụng các đối tượng đồ họa của thư viện này, ta phải khai báo chỉ thị:

Import javax.swing.*;

2 Tại sao lại sử dụng Swing?

Trang 2

Swing là gói con được kế thừa và phát triển từ gói giao diện awt – 1 gói giao diện đời đầu Swing sử dụng những thư viết tự viết độc lập với hệ thống do đó tính ổn định cao, loại bỏ được nhược điểm của awt là phụ thuộc vào hệ thống dẫn đến những kết quả khác nhau ở những hệ điều hành khác nhau

Trang 3

Định nghĩa những yếu tố dụng nhất tạo nên cảm quan (Look And Feel) cho mỗi thành phần Swing Trong gói này chứa các gói con là javax.swing.plaf.basic, javax.swing.plaf.metal và javax.swing.plaf.multi

Chứa những chức năng cần thiết cho việc bổ sung chức năng undo

II Các thành phần trong swing

NỘI DUNG

+ Giao diện người dùng với Java (Java GUI)

+ Các Container : JFrame, JPanel, Jdialog

+ Các component: Jlabel, Jtextfield, Jbutton, JComboBox, JcheckBox, JradioButton+ Layout manager: FlowLayout, GridLayout, BorderLayout, …

Trang 4

+ Tạo menu

1 GIAO DIỆN NGƯỜI DÙNG VỚI JAVA

+ Cung cấp các công cụ cho phép tạo giao tiếp trực quan và hấp dẫn với người dùng,được biết đến là swing

+ Giao diện với người dùng bao gồm 1 cửa sổ chính và các control được đặt lên trên

+ Các thành phần tạo giao diện nằm trong gói javax.swing

+ Tên của các lớp này bắt đầu bằng chữ J

Trang 5

+ Các thành phần đồ họa được đưa vào content pane, không đưa trực tiếp vào đối tượng JFrame

Trang 6

+ JPanel là container trung gian dùng để chứa các conponent khác

+ Thường dùng để phân chia các component trong ứng dụng

JPanel p = new JPanel ();

JFrame f = new JFrame(“Testing a Panel”);

JPanel không thể được nhìn thấy trực tiếp Do đó, chúng ta cần thêm panel đến một frame

Vì vậy ta cần tạo một JFrame mới và thêm JPanel mới được tạo này vào đó

Trang 7

Kết xuất của chương trình:

JDialog

Lớp JDialog tương tự như lớp JFrame, nghĩa là JDialog là lớp con của lớp Window.Đối tượng dialog được tạo như sau:

JFrame myframe=new JFrame(“My frame”);

String title = “Title”;

boolean modal = true;

JDialog dlg=new JDialog(myframe, title, modal);

Tham số modal chỉ ra rằng dialog sẽ ngăn chặn bất kỳ tương tác nào xảy đến với cáccửa sổ được mở khác, trong khi dialog đang được hiển thị trên màn hình Kiểu hộpthoại này ngăn chặn người dùng tương tác với các cửa sổ khác (của cùng ứng dụng)trên màn hình, cho tới khi dialog được đóng lại

2 CÁC THÀNH PHẦN GIAO TIẾP NGƯỜI DÙNG CƠ BẢN

+ Form được dùng để thu thập thông tin tù phía người dùng

+ Trong khi giao tiếp, component được dùng để cho phép nhập liệu là TextField hoặc TextBox

+ Để khởi tạo các phần tử, các bước cần phải thực hiện là:

Tạo phần tử

Trang 8

Thiết lập các thuộc tính (size, color, font, …)Đưa nó vào màn hình

Các loại component

Hình 2.1 JLabel

+ Được dùng để hiện thị văn bản (text) và hình ảnh (image)

+ Tạo hiệu ứng trực quan cho màn hình giao diện

+ Các hàm khởi tạo:

JLabel(); Tạo JLabel trốngJLabel(String st); Tạo JLabel với nội dung là stJLabel(Icon img); Tạo JLabel nội dung là hình ảnh imgJLabel(int align); Tạo một JLabel với một chế độ canh lề (alignment) , canh

lề có thể là JLabel.LEFT, JLabel.RIGHT hay JLabel.CENTER

Các phương thức được sử dụng phổ biến của label được trình bày ở bảng bên dưới:

Trang 9

Phương thức Chức năng

setFont(Font f) Thay đổi phông chữ của JLabelsetText(String s) Thiết lập nhãn cho Jlabel

getText() Lấy nội dung hiện tại của nhãn

Bảng 2.1 Các phương thức của JLabel

Chương trình 2.1 chỉ ra cách sử dụng của Label:

Chương trình 2.1

import javax.swing.*;

class Labeltest

{

JLabel label=new JLabel(“This is just a label”);

public static void main(String args[])

Trang 10

add(label); Label sẽ hiển thị chỉ khi nó được thêm vào container Ở đây, JFrame là

container mà thành phần JLabel được thêm vào Việc này được thực hiện bằng cách sửdụng phương thức add()

Kết xuất của chương trình được chỉ ra ở hình sau

Trang 11

JTextField(); tạo JTextField mớiJTextField(int cols); tạo JTextField mới với số cột cho trướcJTextField(String text); tạo JTextField mới với nội dung cho trướcJtextField(String text, int col);

Các phương thức thường được sử dụng của đối tượng TextField được tóm tắt trongbảng sau:

setEchoChar(char) Đặt các kí tự được hiện ra thay thế

ký tự nhập vào

setText(String s) Gán nội dung cho TextField

setEditable(boolean) Xác định TextField có soạn thảo

được hay không Nó chỉ được soạnthảo khi giá trị tham số truyền vào

là True

isEditable() Xác định xem trường có đang trong

mode soạn thảo hay không Giá trịtrả về kiểu Boolean

Chương trình sau chỉ ra cách sử dụng của TextField:

Trang 12

JPanel p = new JPanel();

JFrame f = new JFrame();

Kết xuất của chương trình được chỉ ra ở hình bên dưới:

JTextArea

+ Cho phép nhập nhiều dòng văn bản

+ Có hỗ trợ thanh cuộn

+ Hàm khởi tạo:

Trang 13

JTextArea(); tạo mới một JTextAreaJTextArea(int rows, int cols); tạo mới một JTextArea với số cột và số dòng

cho trướcJTextArea(String text); tạo mới một JTextArea với nội dung cho trướcJTextArea(String text, int rows, int cols);

Các phương thức thường được sử dụng nhiều nhất của JTextArea:

setText(String) Gán nội dung cho JTextArea

getText() Trả về nội dung của JTextArea

setEdiable(boolean) Xác định xem JTextAreacó thể được soạn

thảo hay không JTextArea có thể được soạnthảo khi giá trị này là True

isEdiable() Xác định xem JTextArea có đang trong chế

độ soạn thảo được không Trả về giá trị làkiểu Boolean

insertText(String, int) Chèn chuỗi được vào vị trí được cho trước

replaceText(String, int, int) Thay thế văn bản nằm giữa vị trí int, int cho

Trang 14

JLabel lb=new JLabel(“Details”);

JTextArea ta=new JTextArea();

JFrame f=new JFrame(“TextArea”);

JPanel p=new JPanel();

Trang 15

import java.awt.*;

class DemoFrm extends JFrame {

public DemoFrm() {

super("Demo Frame");

JPanel p = new JPanel();

JLabel l = new JLabel("Password");

JPasswordField pf = new JPasswordField(12);pf.setEchoChar('*');

Trang 16

+ Thể hiện chức năng nút bấm

+ JButton là lớp con của lớp AbstractButton

+ Đối tượng JButton bao gồm chuỗi văn bản, hình ảnh và các đường viền+ Khởi tạo:

JButton b1 = new JButton(“red”);

JButton b2 = new JButton(“Green”);

JButton b3 = new JButton(“Blue”);

JFrame f= new JFrame(“Button”);

JPanel p= new JPanel();

p.add(b1);

p.add(b2);

Trang 18

JCheckBox(String text, boolean selected);

JCheckBox(String text, Icon icon);

JCheckBox(String text, Icon icon, boolean selected);JCheckBox(Action a);

Chương trình sau minh họa cách sử dụng các checkbox

JLabel l=new JLabel("CheckBoxes");

JCheckBox b1=new JCheckBox("red",true);

JCheckBox b2=new JCheckBox("Green",false);JCheckBox b3=new JCheckBox("Blue",false);

JFrame f=new JFrame("Checkbox and radiobutton");JPanel p=new JPanel();

Trang 19

JRadioButton(String text, boolean selected);

JRadioButton(String text, Icon icon);

JRadioButton(String text, Icon icon, boolean selected);JRadioButton(Action a);

Trang 20

Chương trình sau minh họa cách sử dụng các radiobutton:

JLabel l=new JLabel("JRadioButton");

JRadioButton b1=new JRadioButton("red",true);JRadioButton b2=new JRadioButton("Green",false);JRadioButton b3=new JRadioButton("Blue",false);

JFrame f=new JFrame("JCheckbox");

JPanel p = new JPanel();

ButtonGroup bg = new ButtonGroup();

Trang 21

Kết xuất được chỉ ra ở hình bên dưới:

JList

+ Khi các thông tin dùng để lựa chọn nhiều, chúng ta có thể dùng 1 danh sách để cho phép việc chọn lựa

+ Component JList cho phép sắp xếp dữ liệu hiển thị, có thể phân nhóm

+ JList có thể hiển thị chuỗi và icon

Trang 22

+ JList không hỗ trợ double click chuột

JLabel l = new JLabel("Colors");

String []listData = {"white","black","blue","green"};JList list = new JList(listData);

Trang 23

Cách sử dụng JComboBox tương tự JList

Kết xuất

Trang 24

BỐ TRÍ CÁC THÀNH PHÂN BÊN TRONG CÁC ĐỐI TƯỢNG CHỨA

Layout manager điều khiển cách trình bày vật lý của các phần tử GUI như là button,textbox, option button v.v… Một layout manager tự động bố trí các thành phần này trongcontainer

Các kiểu trình bày khác nhau:

Tất cả các thành phần mà chúng ta vừa tạo sử dụng layout manager mặc định Cho

ví dụ, FlowLayout là cách trình bày mặc định của một applet Layout manager này sẽ

tự động xắp xếp các thành phần Tất cả các thành phần được đặt trong một container,

và được xắp xếp nhờ layout manager tương ứng Layout manager được thiết lậpbằng phương thức setLayout()

Bây giờ chúng ta sẽ tìm hiểu chi tiết các cách trình bày và cách bố trí các thành phần của ta vào những vị trí mong muốn

FlowLayout

FlowLayout là layout manager mặc định cho Applet và Panel Các thành phần được xắp xếp

từ góc trái trên đến góc phải dưới của màn hình Khi một số thành phần được tạo, chúngđược xắp xếp theo hàng, từ trái sang phải

Lớp FlowLayout có 3 cấu trúc:

Trang 25

public FlowLayout();

public FlowLayout(int alignment);

public FlowLayout(int alignment, int horizontalGap, int verticalGap);

aglignment có các giá trị FlowLayout.LEFT, FlowLayout.CENTER, FlowLayout.RIGHT.Thông số horizontalGap và verticalGap xác định số Pixel đặt giữa các thành phần

Chương trình sau minh họa về FlowLayout manager

import javax.swing.*;

import java.awt.FlowLayout;

class Fltest extends JFrame

{

JButton b1=new JButton(“Center Aligned Button 1”);

JButton b2=new JButton(“Center Aligned Button 2”);

JButton b3=new JButton(“Center Aligned Button 3”);

public Fltest(String title)

Trang 26

 NORTH – Đặt ở đỉnh của container.

 EAST – Đặt phía bên phải của container

 SOUTH – Đặt ở phía dưới của container

 WEST – Đặt phía bên trái của container

 CENTER – Đặt ở giữa của container

Để thêm một thành phần vào vùng North, bạn sử dụng cú pháp sau:

Trang 27

Button b1=new Button(“North Button”); // khai báo thành phần

setLayout(new BorderLayout()); // thiết lập layout

add(b1,BorderLayout.NORTH); // thêm thành phần vào layout

Các thành phần vẫn giữ nguyên vị trí tương đối của chúng kể cả khi container bị thay đổikích thước Các thành phần được đặt trong vùng North, South được dàn nằm ngang trongkhi đó các thành phần đặt trong vùng East và West lại được dàn thẳng đứng Các thànhphần được đặt trong vùng Center sẽ được dàn đều vào những khu vực nằm giữa củacontainer

add(b2,BorderLayout.CENTER); // thêm thành phần vào vùng Center

Khi tất cả các thành phần được đặt vào các vùng tương ứng, lúc đó JFrame sẽ giống nhưsau:

BorderLayout có thể chứa nhiều hơn 5 thành phần Để thực hiện điều này, chúng ta có thể

sử dụng các Panel với các layout khác nhau để chứa các thành phần, và sau đó đặt cácpanel này vào trong BorderLayout

CardLayout Manager

Trang 28

CardLayout có thể lưu trữ một ngăn xếp (stack) các giao diện Mỗi giao diện giống như mộtbảng (card) Bảng thường là đối tượng Panel Một thành phần độc lập như button sẽ điềukhiển cách trình bày các bảng ở lớp trên cùng.

Đầu tiên, chúng ta bố trí tập hợp các thành phần được yêu cầu trên các panel tương ứng.Mỗi panel sẽ được bố trí vào các layout khác nhau Ví dụ:

Bước kế tiếp là thêm các panel khác vào panel chính:

panelMain.add(“Red Panel”, panelOne);

panelMain.add(“Blue Panel”, panelTwo);

Phương thức add() sử dụng hai tham số Tham số đầu tiên là một String làm nhãn của panel

và tham số thứ hai là tên đối tượng Panel

Chương trình minh họa CardLayout:

Trang 32

Trong hình bên trên, các panel được thêm vào panel chính như là các thẻ riêng biệt Vì thếchỉ có thẻ đầu tiên mới được thấy trên màn hình Nhưng người dùng có thể điều hướngsang các panel khác sử dụng các phương thức của CardLayout.

GridLayout Manager

GridLayout trợ giúp việc chia container vào trong ô lưới Các thành phần được đặt trong các

ô giao của dòng và cột Mỗi lưới nên chứa ít nhất một thành phần Một lưới được sử dụngkhi tất cả các thành phần có cùng kích thước

GridLayout được tạo như sau:

Gridlayout g1=new GridLayout(4,3);

Trang 33

JButton btn[];

String str[]={“1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”};public Gltest(String title)

Trang 34

GridBagLayout Manager

GridBagLayout là cách trình bày hiệu quả và phức tạp hơn bất cứ cách trình bày nào khác.Layout này đặt các thành phần vào vị trí chính xác Với layout này, các thành phần khôngcần có cùng kích thước Nó tương tự như GridLayout manager, khi các thành phần đượcxắp xếp trong lưới theo dòng và cột Tuy nhiên, thứ tự đặt các thành phần không theonguyên tắc từ trái sang phải và từ trên xuống dưới

GridBagLayout gb=new GridBagLayout()

ContainerName.setLayout(gb);

Để sử dụng layout này, bạn cần cung cấp thông tin về kích thước và vị trí của mỗi thànhphần Lớp GridBagLayoutConstraints chứa tất cả các thông tin mà lớp GridLayout cần để bốtrí và định kích thước mỗi thành phần Bảng sau liệt kê danh sách các biến thành viên củalớp GridBagConstraints

Các biến thành viên Mục đích

weightx, weighty Chỉ ra sự phân phối của khoảng trống trong

GridBagLayout Giá trị mặc định cho các biến này là0

gridwidth, gridheight Chỉ ra số lượng các ô (cell) chiều ngang và chiều

dọc trong vùng hiển thị của một thành phần

ipadx, ipady Chỉ ra lượng làm thay đổi chiều cao và chiều rộng

Trang 35

tối thiểu của thành phần Nó sẽ thêm 2*ipadx vàochiều rộng tối thiểu và 2*ipady vào chiều cao tốithiểu của thành phần Giá trị

mặc định cho cả hai là 0

anchor Chỉ ra cách xắp xếp các thành phần trong cell Mặc

định sẽ đặt vào giữa cell Các thành viên dữ liệutĩnh (static) sau đây có thể được sử dụng:

trị của gridx là ‘GridbagConstraints.RELATIVE’ thì thành phần được thêm sẽ nằm ở vị trí bên phải củathành phần cuối cùng

fill Chỉ ra cách mà một thành phần được bố trí vào cell

thế nào nếu như cell lớn hơn thành phần Mặc định

là kích thước thành phần không thay đổi

Bảng Các biến thành viên của lớp GridBagConstraints

Bảng sau đây cung cấp một danh sách các biến dữ liệu tĩnh là các giá trị cho biến fill:

GridBagConstraints.NONE Mặc định, không làm thay đổi kích

thước của thành phần

GridBagConstraints.HORIZONTAL Tăng chiều rộng của thành phần theo

chiều ngang (HORIZONTAL) để làm cho thành phần khớp với chiều ngang

GridBagConstraints.VERTICAL Tăng chiều cao của thành phần theo

chiều đứng (VERTICAL) để làm chothành phần khớp với chiều dọc

Trang 36

GridBagConstraints.BOTH Tăng chiều rộng, chiều cao của thành

phần theo cả chiều ngang và chiều dọc

insets Xác định khoảng cách top, buttom, left

và right giữa các thành phần Mặc định

là 0

Bảng Các biến thành viên dữ liệu tĩnh của biến fill

Sử dụng phương thức setConstraints() để thiết lập các hằng số cho mỗi thành phần Cho vídụ:

Trang 37

addComponent(ta,0,0,4,1);

gbc.fill=GridBagConstraints.HORIZONTAL;addComponent(b1,0,1,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;addComponent(b2,0,2,1,1);

Trang 39

Kết xuất của chương trình được chỉ ra ở hình

Giải thích đoạn mã trên:

Trang 40

Thành viên fill của lớp GridBagConstraints chỉ ra thành phần có thể được mở rộng theohướng nằm ngang và thẳng đứng Cú pháp sau mô tả thành phần chỉ được mở rộng theohướng nằm ngang:

Ở đây gridx, gridy là cột và dòng nơi mà thành phần có thể được đặt vào

Sử dụng cú pháp sau để chỉ ra số lượng các cột và dòng mà các thành phần có thể chiếmgiữ:

Trang 41

Làm việc không có LayoutManager (Absolute Positioning)

+Bạn có thể đặt các vị trí cho các component mà không cần đung layout manager Giải pháp này dùng để xác định hoàn toàn kích thước và vị trí của component

+ Mặc dù có thể làm việc mà không cần Layout Manager, bạn nên dùng Layout

manager nếu có thể để thay đổi kích thước của Container và điều chỉnh hình dạng của các thành phần phụ thuộc vao Platform

JButton b1 = new JButton("one");

JButton b2 = new JButton("two");

JButton b3 = new JButton("three");

Ngày đăng: 14/08/2014, 07:20

HÌNH ẢNH LIÊN QUAN

Bảng 2.1 Các phương thức của JLabel - LẬP TRÌNH GIAO DIỆN VỚI SWING ppsx
Bảng 2.1 Các phương thức của JLabel (Trang 9)
Bảng Các biến thành viên của lớp GridBagConstraints - LẬP TRÌNH GIAO DIỆN VỚI SWING ppsx
ng Các biến thành viên của lớp GridBagConstraints (Trang 35)
Bảng sau đây cung cấp một danh sách các biến dữ liệu tĩnh là các giá trị cho biến fill: - LẬP TRÌNH GIAO DIỆN VỚI SWING ppsx
Bảng sau đây cung cấp một danh sách các biến dữ liệu tĩnh là các giá trị cho biến fill: (Trang 35)

TỪ KHÓA LIÊN QUAN

w