Tải bản đầy đủ (.docx) (43 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (318.31 KB, 43 trang )

BÀI TẬP NHÓM
NHÓM 3
LẬP TRÌNH GIAO DIỆN VỚI SWING
• Vũ Duy Khánh
• Đặng Thanh Hà
• Nguyễn Đình Thịnh
• Nguyễn Duy Hưng
I. Tổng quan về swing
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?
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 .
3. Các gói và các lớp Swing
3.1. javax.accessibility
Chứa các lớp và các giao tiếp mà có thể được sử dụng cho phép công nghệ trợ giúp để
tương tác với các thành phần của Swing. Các công nghệ trợ giúp đề cập 1 dãy các item, từ
bộ đọc văn bản đến phóng đại màn hình. Mặc dù các lớp accessibility là những công nghệ
không thuộc các thành phần Swing nhưng chúng được sử dụng mở rộng thông qua các
thành phần Swing.
3.2. javax.swing
Chứa các thành phần cốt lõi của Sswing, bao gồm hầu hết các mô hình giao tiếp và các lớp
hỗ trợ
3.3. javax.swing.border
Chứa định nghĩa các lớp đường viền trừu tượng cũng như 8 đường viền được định nghĩa.
Border không phải là những thành phần, thay vì thế, chúng là những yếu tố đồ họa đặc biệt


mà Swing sử dụng như những thuộc tính và đặt chúng xung quanh các thành phần. Nếu
như bạn tạo ra border của riêng bạn, bạn có thể tạo lớp con từ những border có sẵn trong
gói này, hoặc bạn có thể viết mã cho một lớp mới
3.4. javax.swing.colorchooser
Hỗ trợ cho thành phần JcolorChooser
3.5. java.swing.event
Định nghĩa những listener mới và những event mà những thành phần Swing sử dụng để
giao tieeos thông tin với các class
3.6. javax.swing.filechooser
Hỗ trợ cho thành phần JfileChooser
3.7. javax.swing.plaf
Đị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
3.8. javax.swing.table
Cung cấp các mô hình và quan sát cho thành phần table, cho phép bạn sắp xếp thông riêng
biệt trong định dạng lưới với sự xuất hiện tượng tự như bảng tính
3.9. javax.swing.text
Cung cấp các điểm của các lớp và giao tiếp dựa trên văn bản hỗ trợ thiết kế thông dụng
được biết đến như document/view
3.10. javax.swing.test.html
Sử dụng kĩ thuật đọc và định dạng văn bản HTML
3.11. javax.swing.text.html.parser
Hỗ trợ việc phân tích HTML
3.12. javax.swing.text.hf
Sử dụng kĩ thuật đọc và định dạng Rich Text Formay
3.13. javax.swing.tree
Định nghĩa các mô hình và quan sát thành phần một cây phân cấp, có thể thay thế một cấu
trúc file hoặc một dã các thuộc tính
3.14. javax.swing.undo

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, …
+ 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
Hình 1.1
1.1 JFrame
+ Đây là cửa sổ chính dùng để chứa các thành phần giao diện khác. Đóng vai trò là 1
container
+ JFrame thường dùng để tạo ra cửa sổ trong chương trình swing
+ Khởi tạo
JFrame(); Tạo một frame nhưng không hiển thị (invisible)
JFrame(String title); Tạo một frame không hiển thị, có tiêu đề.
+ 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
+ Ví dụ:
Chương trình sau minh hoạ cách tạo một JFrame.
import javax.swing.*;
class FrameDemo
{

public static void main(String args[])
{
JFrame f=new JFrame (“I have been Frameed!!!”);
f.setSize(300,200);
f.setVisible(true);
}
}
Kết xuất của chương trình giống như hình dưới
JPanel
+ 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
+ Layout mặc định là FlowLayout
+ Khởi tạo:
JPanel(); Tạo JPanel mới không tiêu đề
JPanel(LayoutManager layout); Tạo JPanel mới có kiểu Layout là layout
Chương trình sau chỉ ra cách tạo một JPanel:
import javax.swing.*;
class Paneltest
{
public static void main(String args[])
{
JPanel p = new JPanel ();
JFrame f = new JFrame(“Testing a Panel”);
f.add(p);
f.setSize(300,200);
f.setVisible(true);
}
}
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 đó.

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ác
cửa sổ được mở khác, trong khi dialog đang được hiển thị trên màn hình. Kiểu hộp
thoạ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ử
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ống
JLabel(String st); Tạo JLabel với nội dung là st
JLabel(Icon img); Tạo JLabel nội dung là hình ảnh img
JLabel(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:
Phương thức Chức năng
setFont(Font f) Thay đổi phông chữ của JLabel
setText(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[])
{
JFrame f=new JFrame(“Label”);
f.add(label);
f.setSize(300,200);
f.setVisible(true);
}
}
label=new JLabel(“This is just a label”); Tạo đối tượng JLabel
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
JTextComponent
Đây là lớp cha của tất cả các lớp hiển thị văn bản trong Swing
JTextField
+ Cho phép soạn thảo chỉ 1 dòng văn bản

+ Các hàm khởi tạo
JTextField(); tạo JTextField mới
JTextField(int cols); tạo JTextField mới với số cột cho trước
JTextField(String text); tạo JTextField mới với nội dung cho trước
JtextField(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 trong
bảng sau:
Phương thức Chức năng
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.
getText() Lấy nội dung của TextField.
setEditable(boolean) Xác định TextField có soạn thảo
được hay không. Nó chỉ được soạn
thả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:
import javax.swing.*;
class JFrameDemo {
public static void main(String[] args)
{
JTextField tf = new JTextField("This is great ",20);
JPanel p = new JPanel();
JFrame f = new JFrame();
p.add(tf);
f.add(p);
f.setSize(300,200);

f.setVisible(true);
}
}
Trong chương trình này, chúng ta sử dụng phương thức setLayout() để thay đổi cách trình
bày của các thành phần trên vật chứa. Layout manager có chức năng xắp xếp các thành
phần trong một vật chứa.
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:
JTextArea(); tạo mới một JTextArea
JTextArea(int rows, int cols); tạo mới một JTextArea với số cột và số dòng
cho trước
JTextArea(String text); tạo mới một JTextArea với nội dung cho trước
JTextArea(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:
Phương thức Chức năng
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ạn
thả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
trước.
Chương trình sau chỉ ra cách sử dụng của JTextArea:

import javax.swing.*;
class TextAreatest
{
public static void main(String args[])
{
JLabel lb=new JLabel(“Details”);
JTextArea ta=new JTextArea();
JFrame f=new JFrame(“TextArea”);
JPanel p=new JPanel();
p.add(lb);
p.add(ta);
f.add(p);
f.setSize(300,200);
f.setVisible(true);
}
}
Kết xuất của chương trình được chỉ ra ở hình bên dưới:
JPasswordField
import javax.swing.*;
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('*');
p.add(l);
p.add(pf);
pack();

setVisible(true);
}
public static void main(String[] args) {
new DemoFrm();
}
}
JButton
+ 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();
JButton(Icon icon);
JButton(String text);
JButton(String text, Icon icon);
JButton(Action a);
Ví dụ đơn giản sau đây sẽ tạo ra 3 button:
import javax.swing.*;
class Buttontest
{
public static void main(String args[])
{
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);
p.add(b3);

f.add(p);
f.setSize(300,200);
f.setVisible(true);
}
}
Kết xuất của chương trình được chỉ ra ở hình dưới đây
JCheckBox
+ Cung cấp cho người dùng khả năng lựa chọn
+ Các hàm khởi tạo:
JCheckBox();
JCheckBox(Icon icon);
JCheckBox(Icon icon, boolean selected);
JCheckBox(String text);
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
import javax.swing.*;
import java.awt.*;
class JCheckboxtest
{
public static void main(String args[])
{
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();

p.setLayout(new GridLayout(4,1));
p.add(l);
p.add(b1);
p.add(b2);
p.add(b3);
f.add(p);
f.setSize(300,200);
f.setVisible(true);
}
}
Kết xuất được chỉ ra ở hình dưới
JRadioButton
+ 1 tập các nút cho phép lựa chọn chỉ 1 nút tại 1 thời điểm
+ Dùng lớp ButtonGroup để tạo nhóm
+ Các hàm khởi tạo:
JRadioButton();
JRadioButton(Icon icon);
JRadioButton(Icon icon, boolean selected);
JRadioButton(String text);
JRadioButton(String text, boolean selected);
JRadioButton(String text, Icon icon);
JRadioButton(String text, Icon icon, boolean selected);
JRadioButton(Action a);
Chương trình sau minh họa cách sử dụng các radiobutton:
import javax.swing.*;
import java.awt.*;
class JRadioBoxtest
{
public static void main(String args[])
{

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();
bg.add(b1);
bg.add(b2);
bg.add(b3);
p.setLayout(new GridLayout(4,1));
p.add(l);
p.add(b1); p.add(b2); p.add(b3);
f.add(p);
f.setSize(300,200);
f.setVisible();
}
}
Đầu tiên chúng ta tạo một đối tượng JFrame, đối tượng này hoạt động như một container sẽ
chứa thành phần checkbox mà ta đã tạo. Sau đó ta tạo 6 checkbox, 02 checkbox được đánh
dấu chọn. Để làm được điều này, ta đưa giá trị true như một tham số cho hàm contructor
Checkbox, ngoài ra còn có một tham số String là nhãn của checkbox. Để hiển thị các điều
khiển này theo dạng lưới, ta phải thiết lập cách trình bày về dạng GridLayout có 8 dòng và 1
cột. Cuối cùng, ta tạo một biểu hiện cho lớp Checkboxtest và thiết lập kích thước cho
JFrame. Để hiển thị nó, ta cho gọi phương thức setVisible()
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
+ JList không hỗ trợ double click chuột
+ Khởi tạo:
JList();
JList(ListModel dataModel);
JList(Object []listData);
Chương trình sau minh họa cách sử dụng JList
import javax.swing.*;
import java.awt.*;
class JListtest extends JFrame {
public JListtest() {
super("JListtest");
Container c = getContentPane();
c.setLayout(new FlowLayout());
JLabel l = new JLabel("Colors");
String []listData = {"white","black","blue","green"};
JList list = new JList(listData);
c.add(l);
c.add(list);
pack();
setVisible(true);
}
public static void main(String args[])
{
new JListtest();
}
}
Kết xuất như hình dưới
JComboBox
+ Là sự kết hợp giữa TextField và Listbox

+ Cấu trúc gần giống như JList
+ Khởi tạo:
JComboBox();
JComboBox(ComboBoxModel asModel);
JcomboBox(Object []item);
Cách sử dụng JComboBox tương tự JList
Kết xuất
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 trong
container.
Các kiểu trình bày khác nhau:
 Flow layout
 Border layout
 Card layout
 Grid layout
 GridBag Layout
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ập
bằ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:
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)
{
super(title);
setLayout(new FlowLayout(FlowLayout.CENTER));
add(b1);
add(b2);
add(b3);
setSize(300,200);
setVisible(true);

×