Anda di halaman 1dari 97

Chương 5

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


Java

TRẦN MINH THÁI


Email: minhthai@huflit.edu.vn
Website: www.minhthai.edu.vn
Cập nhật: 02 tháng 07 năm 2016
Nội dung
#2

1. Giới thiệu về lập trình giao diện

2. Nguyên lý xử lý sự kiện trong Java

3. Các thành phần giao diện cơ bản trong AWT

4. Tổ chức giao diện với Layout Manager

5. Lập trình Applet

6. Lập trình ứng dụng với SWING


Giới thiệu về lập trình giao diện
#3

Tập hợp các lớp java cung cấp hỗ trợ thiết kế, xây dựng
GUI (Graphic User Interface) bao gồm 2 thư viện:

• awt (java.awt.*): lớp cơ bản lập trình GUI, được phát


triển bởi IBM

• swing (javax.swing.*): dễ dàng và mềm dẻo hơn trong


lập trình GUI
Giới thiệu AWT
#4

• AWT viết tắt của Abstract Windowing Toolkit


• AWT là tập hợp các lớp Java cho phép chúng ta tạo
một GUI.
• Cung cấp các mục khác nhau để tạo hoạt động và
hiệu ứng GUI
– import java.awt.*;
– import java.awt.event.*;
Giới thiệu AWT
#5

• java.awt gồm các lớp GUI cơ bản

• Các lớp Container – lớp chứa (Frame, Panel, Dialog,


ScollPanel)

• Các lớp Component (như Button, TextComponent,


Label)

• Các lớp quản lý layout(FlowLayout, BorderLayout,


GridLayout)

• Các lớp đồ họa tùy biến(Graphics, Color, Font)


Giới thiệu AWT
#6

• java.awt.event gồm các lớp xử lý sự kiện trên giao


diện

• Các lớp sự kiện (ActionEvent, MouseEvent,


KeyEvent và WindowEvent)

• Các giao diện nghe sự kiện(MouseListener,


KeyListener...)

• Các lớp Adapter (MouseAdapter, KeyAdapter)


AWTEvent Container Panel Applet

Font Button Window Frame


#7
FontMetrics Label Dialog FileDialog
TextField
Object Color TextComponent

TextArea
Graphics List

Component Choice

CheckBox

LayoutManager CheckBoxGroup

Canvas

MenuComponent MenuItem Menu

MenuBar
Scrollbar
Nguyên tắc xây dựng GUI
#8

1. Lựa chọn một container: Frame, Window, Dialog,


Applet, …
2. Tạo các control: (buttons, text areas, list, choice,
checkbox,...)
3. Đưa các control vào vùng chứa
4. Sắp xếp các control trong vùng chứa (Layout)
5. Thêm các xử lý sự kiện (Listeners)
Container và Component
#9

• Container: chứa các component, có thể vẽ và tô màu

• Bản thân container cũng là một component

• Một container có thể chứa các container khác

• Phương thức add(Component): thêm một component


vào container

• Component: là đối tượng cơ bản tạo nên giao diện

• Cho phép người dùng tương tác với chương trình


Ví dụ
#10
Toạ độ
#11

y screen
x

screen height

MyWindow height

width

screen width
Top-level Container
#12

• Frame

• Dialog

• Applet
Top-level Container
#13

• Frame: cửa sổ chính của giao diện chương trình


• Xây dựng cửa sổ chương trình bằng cách kế thừa lớp
Frame hoặc kết tập 1 đối tượng Frame
• Kế thừa để sử dụng ngay các thành viên của Frame
• Dialog: cửa sổ pop-up được sử dụng để tạo ra các tương tác
nằm ngoài cửa sổ chính
• Applet: sử dụng trên xây dựng chương trình chạy trên trình
duyệt Web
Secondary Containers
#14

• Panel: khung chữ nhật nằm trong một top-level


container, được sử dụng để tạo layout cho chương trình

• ScrollPane: tạo ra hiệu ứng cuộn chuột (ngang/dọc)


cho một component
Xử lý sự kiện
#15

• Người dùng tương tác với chương trình qua giao diện

• Chương trình phải nghe được các sự kiện trên giao


diện để thực hiện hành động tương ứng

• Ví dụ: nhập liệu, nhấn phím Enter, nhấp chuột, đóng


cửa sổ, ...
Xử lý sự kiện
#16

• Tham gia sự kiện: nguồn (source) sinh sự kiện, bộ


nghe sự kiện (listener), và sự kiện (event)

• Nguồn (source): component phát sinh sự


kiện(button, textfield...)

• Mỗi nguồn sẽ đăng ký các bộ nghe sự kiện khác nhau

• Khi có sự kiện nào đó xảy ra từ nguồn, phương thức


xử lý sự kiện (event handler) trên bộ nghe sự kiện sẽ
được gọi để xử lý
Xử lý sự kiện
#17
WindowListener
#18

public interface WindowListener{


public void windowClosing(WindowEvent evt);
public void windowOpened(WindowEvent evt);
public void windowClosed(WindowEvent evt);
public void windowActivated(WindowEvent evt);
public void windowDeactivated(WindowEvent evt);
public void windowIconified(WindowEvent evt);
public void windowDeiconified(WindowEvent evt);
}
MouseListener
#19

public interface MouseListener {

public void mousePressed(MouseEvent evt);

public void mouseReleased(MouseEvent evt);

public void mouseClicked(MouseEvent evt);

public void mouseEntered(MouseEvent evt);

public void mouseExited(MouseEvent evt);

}
KeyListener
#20

public interface KeyListener {

public void keyPressed(KeyEvent evt);

public void keyReleased(KeyEvent evt);

public void keyTyped(MouseEvent evt);

}
Xử lý sự kiện
#21

• Phương thức xử lý sự kiện

public void actionPerformed(Lớp sự kiện) {

• Xác định nguồn phát sinh sự kiện

Kiểu component tên đối tượng.getSource()


java.awt.Frame
#22

• Frame được dùng để xây dựng các ứng dụng GUI chạy
độc lập

• Frame là một cửa sổ có thanh tiêu đề và các đường


biên. Bố cục mặc định của Frame là BorderLayout
java.awt.Frame
#23

• Frame kế thừa từ Window, nó có thể nghe các sự kiện


xảy ra trên cửa sổ khi cài đặt giao tiếp WindowListener

• Các ứng dụng độc lập thường tạo ra cửa sổ kế thừa từ


lớp Frame
import java.awt.Frame;
import java.awt.event.WindowEvent;
import
#24 java.awt.event.WindowListener;
public class ViDuVeFrame extends Frame
implements WindowListener{
public ViDuVeFrame(){
super("Vi du ve Frame");
this.setSize(300, 200);
this.addWindowListener(this);
}
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public static void main(String []args)
{
ViDuVeFrame vd = new ViDuVeFrame();
vd.setVisible(true);
}
}
java.awt.Panel
#25

• Được dùng để tạo ra các giao diện theo ý muốn (nhóm


các component lại với nhau)

• Một giao diện có thể có nhiều panel sắp xếp theo một
layout nhất định, mỗi panel lại có các component sắp
xếp theo một layout riêng

• Panel có bố cục mặc định là FlowLayout


java.awt.Panel
#26

Panel(BorderLayout)

TextField

Button
12 Button

Panel(GridLayout)

Frame(BorderLayout)
Ví dụ Panel
#27

import java.awt.*;

public class ViDuPanel extends Frame {


Panel myPanel;
public ViDuPanel(){
super("Vi du Frame co chua Panel");
this.setSize(300, 200);
myPanel=new Panel();
this.add(myPanel);
}
public static void main(String []args){
ViDuPanel vd = new ViDuPanel();
vd.setVisible(true);
}
}
java.awt.Dialog
#28

• Là một cửa sổ, thường dùng để nhập hoặc hiển thị


thông tin với người dung, bố cục mặc định là
BorderLayout
• Hai loại hộp thoại
• Modal: Phải đóng hộp thoại trước khi chuyển sang
cửa sổ khác
• Modaless: Có thể giữ nguyên hộp thoại và chuyển
sang cửa sổ khác
Java.awt.Dialog
#29

import java.awt.*;
public class ViDuDialog extends Frame {
public ViDuDialog(){
super("Vi du Frame co chua Dialog");
this.setSize(300, 200);
Dialog dialog = new Dialog(this, "Vi du Dialog“
, false);
dialog.setSize(200, 100);
dialog.setVisible(true);
}
public static void main(String []args){
ViDuDialog vd= new ViDuDialog();
vd.setVisible(true);
}
}
Thêm đối tượng component
#30

1. Khai báo đối tượng component cần thêm

2. Khởi tạo đối tượng với các phương thức khởi tạo phù
hợp

3. Xác định container chứa component này

4. Sử dụng phương thức add (aComponent) để thêm


component vào container
java.awt.Label
#31

• Label dùng để trình bày một chuỗi văn bản ra màn hình

• Một số phương thức của Label:

• public Label(); // tạo nhãn

• public Label(String s); // tạo nhãn với nội dung s

• public Label(String s, int align); // tạo và canh lề

• void setText(String s); // đặt nội dung nhãn

• void setAlignment(int align); // canh lề nhãn

• ...
Ví dụ Label
#32

import java.awt.Frame;
import java.awt.Label;

public class ViDuLabel {


public static void main(String []args) {
Frame myFrame = new Frame("Frame co chua Label");
myFrame.setSize(300, 200);

Label myLabel = new Label();


myLabel.setText(“Day la Label");
myLabel.setAlignment(Label.CENTER);

myFrame.add(myLabel);
myFrame.setVisible(true);
}
}
java.awt.Button
#33

• Một số phương thức của Button

• Button(); // tạo nút nhấn

• Button(String s); // tạo nút nhấn có tên s

• void setLabel(String s); // đổi tên nút

• String getLabel(); // lấy tên nút nhấn

• Để lắng nghe sự kiện nhấn nút ta cần cài đặt giao tiếp
ActionListener
Ví dụ Button
#34

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ViDuButton extends Frame
implements ActionListener {
Button myButton;
public ViDuButton() {
super("Frame co chua Button");
this.setSize(300, 200);
myButton = new Button("Button");
myButton.setSize(50, 10);
this.add(myButton);
this.setVisible(true);
myButton.addActionListener(this);
}
Ví dụ Button
#35

public void actionPerformed(ActionEvent ae) {


if (ae.getSource() == myButton) {
//Định nghĩa xử cho sự kiện nhấn nút
}
}
public static void main(String[] args) {
ViDuButton vd = new ViDuButton();
vd.setVisible(true);
}
}
java.awt.Text Field
#36

• Text Field (ô văn bản) cho phép nhận dữ liệu từ bàn phím trên
một dòng
• Một số phương thức
– TextField(...); // khởi tạo
– void setEditable(boolean b); // đặt/tắt chế độ nhập
– void setEchoChar(char c); // đặt kí tự hiển thị
• Đối tượng nghe cần cài đặt 2 giao tiếp
– ActionListener
– TextListener
• Cài đặt phương thức textValueChanged();
Ví dụ Text Field
#37
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

public class ViDuTextField extends Frame


implements ActionListener, TextListener {
TextField myTextField;
public ViDuTextField(){
super("Frame co Text Field");
this.setSize(300, 200);
myTextField = new TextField(30);
this.add(myTextField);
myTextField.addTextListener(this);
myTextField.addActionListener(this);
}
Ví dụ Text Field
#38

public static void main(String []args) {


ViDuTextField vd = new ViDuTextField();
vd.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//Định nghĩa xử lý cho sự kiện
}
@Override
public void textValueChanged(TextEvent e) {
//Định nghĩa xử lý cho sự kiện
}
}
java.awt.Choice
#39

• Choice cung cấp khả năng lựa chọn một trong số các
mục trong danh sách sổ xuống
• Một số phương thức
• Choice(); // khởi tạo
• void addItem(String s); // thêm item là s
• String getItem(int index);// lấy item có chỉ số index
• String getSeclectedItem(); // trả về item được chọn
• int getSelectedIndex(); // trả về index của item được chọn

• Lớp nghe cài đặt giao tiếp ItemListener


• Cài đặt phương thức itemStateChanged(...)
Ví dụ Choice
#40
import java.awt.Choice;
import java.awt.Frame;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class ViDuChoice extends Frame
implements ItemListener {
Choice myChoice;
public ViDuChoice() {
super("Frame co lua chon");
this.setSize(300, 200);
myChoice = new Choice();
myChoice.addItem("Item1");
myChoice.addItem("Item2");
myChoice.addItem("Item3");
myChoice.addItemListener(this);
this.add(myChoice);
}
Ví dụ Choice
#41

public static void main(String[] args) {


ViDuChoice vd = new ViDuChoice();
vd.setVisible(true);
}

@Override
public void itemStateChanged(ItemEvent e) {
//Xử lý sự kiện chọn item
}
}
java.awt.Checkbox
#42

• Checkbox cung cấp các hộp tuỳ chọn cho người dùng
đánh dấu

• Một số phương thức

• Checkbox(...); // khởi tạo

• void setLabel(Strings); // đặt nhãn mới

• booleangetState(); // lấy trạng thái hiện tại

• Lớp nghe cài đặt giao tiếp ItemListener

• Cài đặt phương thức itemStateChanged(...)


Ví dụ Checkbox
#43

import java.awt.Checkbox;
import java.awt.Frame;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class ViDuCheckBox extends Frame


implements ItemListener{
Checkbox myCheckbox;
public ViDuCheckBox(){
super("Frame co Checkbox");
this.setSize(300, 200);
myCheckbox = new Checkbox("Danh dau chon");
myCheckbox.addItemListener(this);
this.add(myCheckbox);
}
Ví dụ Checkbox
#44

public static void main(String []args) {


ViDuCheckBox vd = new ViDuCheckBox();
vd.setVisible(true);
}

@Override
public void itemStateChanged(ItemEvent e) {
//Định nghĩa xử lý sự kiện chọn
}
}
Radio Button
#45

• Các Checkbox có thể được đặt trong một CheckboxGroup


để tạo ra các Radio Button

• Chỉ cho phép chọn 1 tuỳ chọn trong nhóm


import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
#46
public class ViDuRadioButton extends Frame
implements ItemListener {
CheckboxGroup myGroup;
Checkbox myRadio1;
Checkbox myRadio2;
public ViDuRadioButton() {
super("Frame co Radio button");
this.setSize(300, 200);
this.myGroup = new CheckboxGroup();
this.myRadio1 = new Checkbox("Nam",myGroup, true);
this.myRadio2 = new Checkbox("Nu",myGroup, false);
this.add(myRadio1);
this.add(myRadio2);
myRadio1.addItemListener(this);
myRadio2.addItemListener(this);
this.setLayout(new GridLayout(1, 2));
}
#47

public static void main(String[] args) {


ViDuRadioButton vd = new ViDuRadioButton();
vd.setVisible(true);
}

@Override
public void itemStateChanged(ItemEvent e) {
//Định nghĩa xử lý thay đổi lựa chọn
}
}
java.awt.List
#48

• List cho phép người dùng chọn một hay nhiều item
từ một danh sách các item
• Một số phương thức
– List(); // khởi tạo
– List(int items, boolean ms); // cấu tử mở rộng
– String getSeclectedItem(); // lấy lại thành phần được chọn

• Lớp nghe cài đặt giao tiếp ItemListener và/hoặc


ActionListener
Ví dụ List
import java.awt.*;
#49
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class ViDuList extends Frame
implements ItemListener, ActionListener {
List myList;
public ViDuList(){
super("Frame co chua list");
this.setSize(300, 200);
myList = new List(3);
myList.add("List 1");
myList.add("List 2");
myList.add("List 3");
this.add(myList);
myList.addItemListener(this);
myList.addActionListener(this);
}
Ví dụ List
#50

@Override
public void actionPerformed(ActionEvent e) {
// Xử lý sự kiện
}

@Override
public void itemStateChanged(ItemEvent e) {
// Xử lý sự kiện
}

public static void main(String []args){


ViDuList vd=new ViDuList();
vd.setVisible(true);
}
}
Trình bày component (Layout)
#51

• Flow Layout

• Border Layout

• Grid Layout

• Gridbag Layout

• Null Layout
FlowLayout
#52

• Các component được sắp xếp theo thứ tự từ trái sang


phải và từ trên xuống dưới

• Các component có kích thước tuỳ chỉnh

• Nếu chiều rộng của Container không đủ chỗ cho các


component thì tự động tạo ra một dòng mới

• Thường được dùng để sắp xếp các button trong 1 Panel

• Có thể điều chỉnh khoảng cách giữa các component


Ví dụ
#53
import java.awt.*;
public class ViDuFlowLayout extends Frame {
Button[] myButton;
#54
public ViDuFlowLayout() {
super("Vi du FlowLayout");
this.setSize(300, 200);
this.setLayout(new FlowLayout(FlowLayout.CENTER,
20, 10));//Canh giữa, cách ngang 20, dọc 10
myButton = new Button[10];
for (int i = 0; i < 10; i++) {
myButton[i] = new Button("Button " + (i + 1));
this.add(myButton[i]);
}
}
public static void main(String[] args) {
ViDuFlowLayout vd = new ViDuFlowLayout();
vd.setVisible(true);
}
}
BorderLayout
#55

• Chia làm 4 vùng: NORTH, SOUTH, WEST, EAST và


CENTER

• Cho phép sắp xếp và thay đổi kích thước của những
component chứa trong nó sao cho vừa với 5 vùng
tương ứng

• Không cần phải gắn component vào cho tất cả các


vùng
BorderLayout
#56

• Các component ở vùng NORTH và SOUTH có chiều


cao tùy ý nhưng có chiều rộng đúng bằng chiều rộng
vùng chứa

• Các component ở vùng EAST và WEST có chiều rộng


tùy ý nhưng có chiều cao đúng bằng chiều cao vùng
chứa.

• Các component ở vùng CENTER có chiều cao và


chiều rộng phụ thuộc vào các vùng xung quanh
Ví dụ BorderLayout
#57
public class ViDuBorderLayout extends Frame {
Button leftButton, rightButton, topButton, bottomButton,
centerButton;
public ViDuBorderLayout() {
#58
super("Vi du Border Layout");
this.setSize(500, 300);
this.setLayout(new BorderLayout(20, 10));
topButton = new Button("Top");
bottomButton = new Button("Bottom");
leftButton = new Button("Left");
rightButton = new Button("Right");
centerButton = new Button("Center");
this.add("North", topButton);
this.add("South", bottomButton);
this.add("West", leftButton);
this.add("East", rightButton);
this.add("Center", centerButton);
}
public static void main(String[] args) {
ViDuBorderLayout vd = new ViDuBorderLayout();
vd.setVisible(true);
}
}
GridLayout
#59

• Bộ trình bày tạo một khung lưới vô hình với các ô


bằng nhau

• Các đối tượng sẽ đặt vừa kích thước với từng ô

• Thứ tự sắp xếp từ trái qua phải và từ trên xuống dưới


Ví dụ GridLayout
#60
import java.awt.*;
public class ViDuGridLayout extends Frame {
#61
Button myButton[];
Checkbox myCheckbox;
TextField myText;
List myList;

public ViDuGridLayout() {
super("Vi du Grid Layout");
this.setSize(600, 300);
this.setLayout(new GridLayout(4, 2, 20, 10));
myButton = new Button[5];
for(int i=0; i<5; i++){
myButton[i]=new Button("Button " + (i+1));
this.add(myButton[i]);
}
myCheckbox = new Checkbox("Checkbox", true);
#62 myText =new TextField("Enter text here");
myList = new List(3);
myList.add("List 1");
myList.add("List 2");
myList.add("List 3");

this.add(myCheckbox);
this.add(myText);
this.add(myList);
}

public static void main(String[] args) {


ViDuGridLayout vd = new ViDuGridLayout();
vd.setVisible(true);
}
}
GridBagLayout
#63

• Các componet sẽ được trình bày trên 1 khung lưới vô hình


• Các đối tượng có thể là 2, 3, … ô hay nhiều hơn tùy theo
các ràng buộc được chỉ định thông qua đối tượng
GridBagConstraints
• gridx, gridy: vị trí ô sẽ đưa đối tượng con vào
• gridwidth, gridheight: xác định số ô cho đối tượng
• Insets: khoảng cách biên phân cách theo 4 chiều (trên,
dưới, trái, phải)
• weightx, weighty: kích thước của đối tượng
Ví dụ GridBagLayout
#64
public class ViDuGridBagLayout extends Frame {
Button myButton[];
public ViDuGridBagLayout() {
#65 super("Vi du GridBag Layout");
this.setSize(400, 300);
GridBagLayout layout = new GridBagLayout();
this.setLayout(layout);
GridBagConstraints cst = new GridBagConstraints();
cst.insets = new Insets(5, 5, 5, 5);
myButton = new Button[6];
for(int i=0; i<6; i++){
myButton[i]=new Button("Button " + (i+1));
}
cst.fill = GridBagConstraints.BOTH;
cst.gridx =0;
cst.gridy=0;
cst.weightx = 0.5;
cst.weighty = 0.0;
cst.gridwidth = 2;
cst.gridheight = 1;
layout.setConstraints(myButton[0], cst);
#66

cst.gridx = 2;
cst.gridy= 0;
cst.weightx = 0.0;
cst.weighty = 0.0;
cst.gridwidth = 1;
cst.gridheight = 1;
layout.setConstraints(myButton[1], cst);

cst.gridx =3;
cst.gridy=0;
cst.weightx = 0.0;
cst.weighty = 0.5;
cst.gridwidth = 1;
cst.gridheight = 3;
layout.setConstraints(myButton[2], cst);
#67
cst.gridx =0;
cst.gridy=1;
cst.weightx = 0.0;
cst.weighty = 0.0;
cst.gridwidth = 1;
cst.gridheight = 1;
layout.setConstraints(myButton[3], cst);

cst.gridx = 1;
cst.gridy= 1;
cst.weightx = 0.5;
cst.weighty = 0.0;
cst.gridwidth = 2;
cst.gridheight = 1;
layout.setConstraints(myButton[4], cst);
cst.gridx = 0;
#68
cst.gridy= 2;
cst.weightx = 0.5;
cst.weighty = 0.0;
cst.gridwidth = 3;
cst.gridheight = 1;
layout.setConstraints(myButton[5], cst);

for(int i=0; i<6; i++){


this.add(myButton[i]);
}
}

public static void main(String[] args) {


ViDuGridBagLayout vd = new ViDuGridBagLayout();
vd.setVisible(true);
}
}
NullLayout
#69

• Phải qui định kích thước của khung chứa và kích thước, vị
trí của từng đối tượng component trong khung chứa

• Phương thức setLayout(null)

• Định vị và kích thước cho component

• public void setLocation(Point p)

• public void setSize(Dimension p)

• public void setBounds(Rectangle r)


Ví dụ NullLayout
#70
public class ViDuNullLayout extends Frame {
Button myButton1, myButton2;
public ViDuNullLayout() {
#71 super("Vi du Null Layout");
this.setBounds(5, 5, 490, 290);
this.setLayout(null);

myButton1 = new Button("Button 1");


myButton1.setSize(100, 50);
myButton1.setBounds(50, 50, 100, 50);
myButton2 = new Button("Button 2");
myButton2.setSize(new Dimension(200, 30));
myButton2.setBounds(50, 200, 200, 30);
this.add(myButton1);
this.add(myButton2);
}
public static void main(String[] args) {
ViDuNullLayout vd = new ViDuNullLayout();
vd.setVisible(true);
}
}
Bài tập
#72

Thiết kế giao diện và xử lý cho bài toán cộng, trừ, nhân và chia
2 số được nhập từ 2 TextField, gồm các thành phần:

• 2 ô nhập liệu

• 1 ô xuất kết quả (không cho phép nhập)

• Các nút nhấn: cộng, trừ, nhân, chia và thoát chương trình

!!!Đối với phép chia: nếu số chia = 0 thì hiển thị hộp thoại
thông báo lỗi
Bài tập về nhà
#73

Thiết kế giao diện và viết chương trình giả lập phần mềm
calculator
Menu
#74

Bao gồm các loại

• Menubar

• Menu

• PopupMenu

• MenuItem
Menubar
#75

Dùng để chứa menu, các phương thức

• Menubar(): khởi tạo

• Add(Menu): thêm menu vào menubar

Gắn menu vào frame

• Đối tượng frame.setMenuBar(đối tượng menu);


Menu và PopupMenu
#76

Các phương thức:

• Menu(String): khởi tạo menu

• add(MenuItem): thêm một item vào menu

• add(Menu): thêm một menu con vào menu đã có

• addSeparator(): thêm đường ngăn cách menu

Xử lý sự kiện: ActionEvent, ActionListioner


MenuItem
#77

Các phương thức:

• MenuItem(String): khởi tạo

• CheckboxMenuItem(String): khởi tạo menu dạng checkbox

• getState(): trạng thái checkbox menu

• enable()

• disable(): làm mờ

Xử lý sự kiện: ActionEvent, ActionListener


Ví dụ MenuBar
#78
public class ViDuMenuBar extends Frame implements
ActionListener
#79 {
MenuBar myMenuBar;
Menu myMenu;

public ViDuMenuBar(){
super("Vi du menubar");
this.setSize(500, 300);
myMenuBar = new MenuBar();
myMenu = new Menu("File");
this.setMenuBar(myMenuBar);
myMenuBar.add(myMenu);

myMenu.add(new MenuItem("Open..."));
myMenu.add(new MenuItem("Save..."));
myMenu.addSeparator();
myMenu.add(new MenuItem(("Exit")));
myMenu.addActionListener(this);
this.addWindowListener(new WindowAdapter() {
#80 @Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Exit"))
System.exit(0);
}
public static void main(String []args){
ViDuMenuBar vd = new ViDuMenuBar();
vd.setVisible(true);
}
}
Ví dụ PopupMenu
#81
public class ViDuPopupMenu extends Frame
implements MouseListener{
PopupMenu myMenu;
#82 public ViDuPopupMenu(){
super("Vi du PopupMenu");
this.setSize(500, 300);
myMenu = new PopupMenu("Popup menu");

myMenu.add(new MenuItem("Copy..."));
myMenu.add(new MenuItem("Cut..."));
myMenu.addSeparator();
myMenu.add(new MenuItem(("Paste")));
this.add(myMenu);
this.addMouseListener(this);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void mouseClicked(MouseEvent e) {
#83 if(e.getButton()==MouseEvent.BUTTON3)
myMenu.show(e.getComponent(),
e.getX(), e.getY());
}

@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
public static void main(String []args){
ViDuPopupMenu vd = new ViDuPopupMenu();
vd.setVisible(true);
}
}
Applet
#84

• Là một chương trình Java được gọi trong ứng dụng


khác

• Thường là trình duyệt Web có hỗ trợ Java

• Applet có thể thể hiện multimedia, tạo được sự tương


tác với user
Cấu trúc tổng quát của Applet
import java.applet.Applet;
#85
import java.awt.*;
public class ViDuApplet extends Applet {
// Khai báo thuộc tính
public void init() {
// Khởi tạo thuộc tính, load hình ảnh ...
}

public void start() {


// Kích hoạt
}

public void stop() {


// Dừng
}

public void destroy() {


// Dọn dẹp trước khi thoát applet
}
Cấu trúc tổng quát của Applet
#86

public void paint(Graphics g) {


// Các thao tác vẽ
}

public void repaint(Graphics g) {


// Tự động gọi update()
}

public void update(Graphics g) {


// Tự động gọi paint()
}
//Các phương thức khác
}
Vòng đời của Applet
#87
Vòng đời của Applet
#88

• init(): Chỉ được gọi khi applet bắt đầu thực thi

• start(): Được gọi sau init() hoặc khi applet được trở lại

• paint(): Được gọi sau khi trình duyệt init và start, và


được gọi lại khi trình duyệt được vẽ lại

• stop(): Được gọi khi applet được thu nhỏ

• destroy(): Được gọi khi applet kết thúc (tắt trình duyệt)
Sử dụng Applet
#89

• Để thực thi một applet, tạo một tập tin HTML có sử dụng
thẻ applet hoặc thẻ object

• Thẻ applet/object có hai thuộc tính: Width, Height

<APPLET CODE=“ViDuApplet.class"

WIDTH=200

HEIGHT=200>

</APPLET>
Ví dụ
#90
import java.applet.Applet;
import java.awt.*;

#91 MyFirstApplet.java public class MyFirstApplet extends Applet{


public void paint(Graphics g){
g.drawString("Hello, this is my first
Java Applet", 25, 50);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
MyFirstApplet.html

<meta charset="UTF-8">
<title>Ví dụ về Java Applet</title>
</head>
<body>
<applet code="MyFirstApplet.class"
width="300" height="200">
</applet>
</body>
</html>
Các phương thức của Graphics
#92

• drawString(string, left, bottom): Vẽ một xâu với font chữ


và màu hiện tại với góc trái (left) và đáy (bottom) của xâu

• drawRect(left, top, width, height): Vẽ đường viền hình chữ


nhật (1-pixel border) với màu hiện tại

• fillRect(left, top, width, height): Vẽ hình chữ nhật đặc với


màu hiện tại

• drawLine(x1, y1, x2, y2): Vẽ một đường với độ dày 1 pixel


từ tọa độ (x1, y1) đến tọa độ (x2, y2)
Các phương thức của Graphics (tt)
#93

• drawOval, fillOval: Vẽ hình oval (viền/đặc) với các


tham số chỉ ra là hình chữ nhật bao quanh

• drawPolygon, fillPolygon: Vẽ hình đa giác (viền/đặc)


với các điểm được xác định bởi các mảng hoặc một đối
tượng Polygon

• drawPolyline: Vẽ đường gấp khúc

• drawImage: Vẽ hình ảnh (JPEG hoặc GIF)


Các phương thức của Graphics (tt)
#94

• drawArc: Vẽ đường viền hình cung

• fillArc: Vẽ hình cung đặc

• Color getColor(): Lấy màu hiện tại

• setColor(Color): Đặt màu

• Font getFont(): Lấy thông tin font

• setFont(Font f): Gán thông tin mới cho font


import java.applet.Applet;
import java.awt.*;
#95
public class ViDuGraphics
extends Applet {
public void paint(Graphics g){
g.setFont(new Font("Tahoma“
, Font.BOLD, 20));
g.setColor(Color.BLUE);
g.drawString("Ví dụ đối
tượng Graphics", 15, 20);
g.setColor(Color.RED);
g.drawLine(15, 30, 215, 30);
g.drawRect(15, 40, 200, 50);
g.fillOval(15, 40, 200, 50);
int x[]={15, 40, 100, 170};
int y[]={100, 140, 150, 250};
g.drawPolygon(x, y, 4);
}
}
Java Swing
#96
Q&A
#97

Anda mungkin juga menyukai