Ứng dụng Applet với của sổ Popup

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 107 - 148)

Với Applet chỳng ta hoàn toàn cú thể cú thờm cỏc cửa sổ pop-up để mở rộng khụng gian làm việc. Sau đõy là một Japplet cú thể mở một Frame mới.

import java.awt.*; import java.awt.event.*; import javax.swing.*;

public class PopupCalculatorApplet extends JApplet {

public void init() {

// Tạo một frame với một cửa sổ panel final JFrame frame = new JFrame(); frame.setTitle("Calculator");

frame.setSize(200, 200);

// Thờm một Button để ẩn/ hiện frame pop-up JButton calcButton = new JButton("Calculator"); add(calcButton);

calcButton.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent event) { frame.setVisible(!frame.isVisible()); } }); } } V. Cỏc thẻ HTML của Applet

Một khai bỏo applet trong trang HTML thường cú dạng:

<applet code="NotHelloWorldApplet.class" width="300" height="100"> Thong tin duoc hien thi khi applet khong hien thi

</applet>

Sau đõy ta sẽ tỡm hiểu cỏc thuộc tớnh của applet: Cỏc thuộc tớnh về vị trớ:

• height: Chiều cao của applet. Cỏc applet khụng thể thay đổi kớch thước khi đó chạy.

• width: Chiều rộng của applet

• align: Xỏc định vị trớ của applet so với cỏc văn bản xung quanh nú. Cỏc giỏ trị của align cú thể là: left, right, middle, top, texttop, absmiddle, baseline, bottom, absbottom, vspace và hspace.

Cỏc thuộc tớnh về chương trỡnh nguồn- code:

code : Thuộc tớnh này cho biết tờn của class chứa chương tỡnh applet. Tờn này là tương đối so với giỏ trị codebase hoặc với thư mục hiện hành nếu khụng cú codebase. Đường dẫn phải phự hợp với đường dẫn gúi của class applet. Vớ dụ: nếu applet cú tờn MyApplet.class được đặt trong gúi com.mycompany thỡ đường dẫn phải là:

code="com/mycompany/MyApplet.class". hoặc:

code="com.mycompany.MyApplet.class" cũng được chấp nhận.

- codebase: Là một thuộc tớnh tựy chọn để xỏc định đường dẫn tuyệt đối nơi chứa class ở giỏ trị code.

archive: Chứa tờn cỏc gúi chương trỡnh hoặc tài nguyờn khỏc được tải về kốm theo applet. Cỏc gúi chương trỡnh được nộn ở dạng file JAR và được đặt cỏch nhau bởi dấu ,. Vớ dụ:

<applet code="CalculatorApplet.class"

archive="CalculatorClasses.jar,corejava/CoreJavaClasses.jar" width="100" height="150">

object: Chứa tờn file đó được tuần tự húa của một applet.

name: Tờn của applet. Trong cỏc trỡnh duyệt của Netscape hoặt Windows đều cho phộp applet giao tiếp với cỏc đối tượng javascript khỏc trờn trang web. Khi đú applet cần cú tờn để truy cập.

Ngoài ra Java cho phộp ta định nghĩa cỏc tham số cho applet thụng qua cỏc thẻ <param> Vớ dụ:

<applet code="FontParamApplet.class" width="200" height="200"> <param name="font" value="Helvetica"/>

</applet>

Khi đú trong chương trinh applet, ta cú thể lấy ra để sử dụng: public class FontParamApplet extends JApplet

{

public void init() {

String fontName = getParameter("font");

int fontSize = Integer.parseInt(getParameter("size")); . . .

} }

VI. Cỏc phương thức, lập trỡnh đồ họa và bắt sự kiện của applet

• public void paint(Graphics g) {...}: Là phương thức hiển thị cơ bản, thường cỏc applet dựng paint() để biểu diễn cỏc hoạt động của mỡnh trờn trang web.

• public void update(Graphics g) {...}: là phương thức ta dựng sau khi thực hiện pain() nhằm làm tăng hiệu quả vẽ.

Ngoài ra Applet cũn thừa hưởng cỏc phương thức từ lớp AWT.

• Phương thức repaint() được dựng khi cửa sổ cần cập nhật lại. Phương thức này chỉ cần một tham số là đối tượng của lớp Graphics.

• getDocumentBase(): cho biết địa chỉ dạng URL của thư mục chứa tập tin HTML chứa applet.

• getCodeBase(): Cho biết địa chỉ dạng URL của thư mục chứa tập tin .CLASS của applet.

• getImage(URL url, String name): trả về một đối tượng ảnh hiển thị trờn nền. • getLocale(): Xỏc định vị trớ applet.

• getAudioClip(URL url, String name): cho đối tuợng audio. • showStatus(String st): hiển thị xõu st trờn thanh trang thỏi.

• drawChars(char array[ ], int offset, int length, int xCoor, int yCoor): xuất cỏc ký tự. Chỳ thớch cỏc tham số: array: Mảng cỏc ký tự; offset: Vị trớ bắt đầu, nơi cỏc ký tự được vẽ.; length: Số cỏc ký tự cần được vẽ; xCoor: Toạ độ X, nơi cỏc ký tự cần được vẽ; yCoor: Toạ độ Y, nơi cỏc ký tự cần được vẽ.

• drawBytes(byte array[ ], int offset, int length, int xCoor, int yCoor): xuất cỏc byte ra.Trong đú array: Mảng cỏc byte.;Vị trớ offset hay vị trớ bắt đầu; length: Số byte cần vẽ; xCoor: Toạ độ X; yCoor: Toạ độ Y.

• drawLine(int x1, int y1, int x2, int y2): Vẽ đường thẳng từ A(x1, y1) đến B(x2, y2).

• drawOval(int xCoor, int yCoor, int width, int height): Vẽ đường oval.

• fillOval(int xCoor, int yCoor, int width, int height): Vẽ hỡnh oval đặc.Trong đú: width là Chiều rộng của hỡnh, height là Chiều cao của hỡnh.

• drawRect(int xCoor, int yCoor, int width, int height): Vẽ hỡnh chữ nhật. • fillRect(int xCoor, int yCoor, int width, int height): Vẽ hỡnh chữ nhật đặc.

• drawRoundRect(int xCoor, int yCoor, int width, int height, int arcwidth, int archeight): Vẽ hỡnh chữ nhật cú bo gúc.

• fillRoundRect(int xCoor, int yCoor, int width, int height, int arcwidth, int archeight): vẽ hỡnh chữ nhật bo gúc đặc.

Trong đú: arcwidth: làm trũn gúc trỏi và gúc phải của hỡnh chữ nhật. archeight: làm trũn gúc trờn đỉnh và gúc đỏy của hỡnh chữ nhật.

Vớ dụ, arcwidth = 20 cú nghĩa là hỡnh chữ nhật được làm trũn cạnh trỏi và cạnh phải mỗi cạnh 10 pixel.

• draw3Drect(int xCoord, int yCoord, int width, int height, boolean raised): Vẽ hỡnh chữ nhật 3D.

• drawArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight): Vẽ hỡnh cung.

• fillArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight): Vẽ hỡnh cung đặc.

Trong đú: xCoord: Toạ độ x; yCoord: Toạ độ y.

width: Chiều rộng của cung được vẽ; height: Chiều cao của cung được vẽ.

arcwidth: Gúc bắt đầu; archeight: Độ rộng của cung (gúc của cung) so với gúc ban đầu. • drawPolyline(int xArray[ ], int yArray[ ], int totalPoints): Vẽ nhiều đường thẳng Trong đú: xArray: Mảng lưu trữ toạ độ x của cỏc điểm; yArray: Mảng lưu trữ toạ độ y của cỏc điểm; totalPoints: Tổng số điểm cần vẽ.

• setFont(new Font(“Times Roman”, Font.BOLD, 15)): Đặt Font cho chữ, (Font.BOLD, Font.PLAIN, Font.ITALIC)

• drawPolygon(int x[ ], int y[ ], int numPoints):Vẽ đa giỏc. • fillPolygon(int x[ ], int y[ ], int numPoints): Vẽ đa giỏc đặc.

Trong đú: x[ ]: Mảng lưu trữ toạ độ x của cỏc điểm; y[ ]: Mảng lưu trữ toạ độ y của cỏc điểm; numPoints: Tổng số điểm cần vẽ; setColor(Color c): Đặt màu vẽ.

Bảng một số màu cơ bản: Color.white Color.black Color.orange Color.gray Color.lightgray Color.darkgray Color.red Color.green Color.blue Color.pink Color.cyan Color.magenta Color.yellow

Đề tài 10. Lập trỡnh giao diện đồ họa GUI

I. Giới thiệu AWT

Abstract Windows Toolkit – AWT: Là thư viện của Java cung cấp cho lập trỡnh viờn cỏc giải phỏp giao diện người dựng đồ hoạ (Graphical User Interface - GUI) thõn thiện.

Một giao diện người dựng được hỡnh thành từ cỏc phần tử của GUI. Một phần tử GUI được thiết lập bằng cỏch sử dụng cỏc thủ tục:

1. Tạo đối tượng.

2. Xỏc định sự xuất hiện ban đầu của đối tượng. 3. Chỉ ra nú nằm ở đõu.

4. Thờm phần tử vào giao diện trờn màn hỡnh.

Để làm việc với cỏc đối tượng GUI chỳng ta cần nhập gúi java.awt.*.

AWT cung cấp cỏc thành phần khỏc nhau để tạo GUI hiệu quả, cỏc thành phần này cú thể là:

• Vật chứa (Container). • Thành phần (Component).

• Trỡnh quản lý cỏch trỡnh bày (Layout manager). • Đồ hoạ (Graphics) và cỏc tớnh năng vẽ (draw). • Phụng chữ (Font).

• Sự kiện (Event).

Từ phiờn bản 1.4, Java phỏt triển một thư viện mở rộng mới với đa số cỏc lớp GUI kế thừa từ AWT nhưng cú khả năng di động tốt hơn. Cỏc lớp GUI trong swing cú thờm tiền tố “J” so với cỏc lớp trong AWT. Sau đõy, chỳng ta sẽ xột cỏc thành phần GUI trong swing.

Sơ đồ phõn cấp thừa kế cỏc đối tượng GUI trong swing như sau:

II. Vật chứa (Container)

Là vựng mà ta cú thể đặt cỏc thành phần (component) của giao diện. Một vật chứa cú thể chứa nhiều phần tử. Vật chứa thường được sử dụng là:

• JPanel - khung chứa đơn giản nhất, để nhúm cỏc đối tượng con lại và sắp xếp theo cỏch thớch hợp.

• JFrame - là một cửa sổ như mọi ứng dụng của windows, để tạo cỏc ứng dụng windows.

• JDialogs - là cửa sổ nhưng khụng đầy đủ chức năng như Frame, nú là cửa sổ hộp thoại đưa ra những lời thụng bỏo.

• JScrollPanel - khung chứa như Panel nhưng cú hai thanh trượt.

II.1 JFrame

Tạo đối tượng khung chứa JFrame bằng phương thức khởi tạo: void JFrame(); Tạo Frame với tiờu đề bờn trờn: void JFrame(String FrameTitle);

Vớ dụ:

JFrame frame1 = new JFrame();

JFrame frame2 = new JFrame("Cua so Frame"); import javax.swing.*;

public class FrameSample {

public static void main(String[] argvs) {

JFrame f = new JFrame(); f.setSize(400,400); f.setVisible(true); }

}

Một số phương thức hay sử dụng:

• Đặt lại kớch thước cho JFrame: frame1.setSize(int width, int height); • Đưa cửa sổ hiện ra màn hỡnh: frame1.show();

frame1.setVisible(boolean b); trong đú: b = true cho hiển thị, b = false cho ẩn.

• Bỏ hoàn toàn đối tượng JFrame: frame1.dispose();

• Thay đổi tiờu đề cho JFrame: frame1.setTitle(String newTitle); • Lấy tiờu đề của JFrame: public String getTitle();

• Co dón JFrame: public void setResizable(boolean b); trong đú: b = true thỡ Frame cú thể thay đổi kớch thước, b = false thỡ khụng đổi.

• Xỏc định JFrame đang ở tỡnh trạng nào: public boolean isResizable(); • Thay đổi biểu tượng JFrame: public setIconImage(Image img);

II.2 JPanel

JPanel khụng thể nhỡn thấy trực tiếp, nú là đối tượng dựng để chứa cỏc thành phần GUI trờn màn hỡnh. Do đú chỳng ta cần gắn JPanel vào đối tượng nào đú như: JFrame, JApplet, ...

Tạo khung chứa JPanel bằng phương thức khởi tạo: JPanel panel1 = new JPanel(); Vớ dụ sau tạo một đối tượng JPanel và đặt vào nú một đối tượng nỳt bấm JButton.

import javax.swing.*; public class FrameSample {

public static void main(String[] argvs) {

JFrame f = new JFrame(); JPanel p = new JPanel(); p.add(new JButton("OK"));

f.add(p); // gắn JPanel vào JFrame f.setSize(400,400);

f.setVisible(true); }

}

II.3 JDialog

Như JFrame, nhưng ớt chức năng hơn, cũn được gọi là popup-window. Ta cú thể tạo JDialog dưới hai hỡnh thức:

• modal: là cửa sổ JDialog khi thực hiện sẽ khoỏ chặt cỏc cửa sổ khỏc. Cửa sổ này thường yờu cầu một tỏc vụ nào đú cần phải hoàn thành ngay.

• non-modal: ngược lại với modal, cửa sổ này thớch ứng với cỏc thao tỏc mang tớnh tuỳ biến.

Cỏch tạo khung chứa JDialog từ phương thức khởi tạo: public JDialog(JFrame parentWindow, boolean isModal);

trong đú: isModal - quyết định xem JDialog được tạo ra ở dạng nào: isModal = true cho modal cũn isModal = false cho non-modal.

Vớ dụ: JDialog myDialog = new JDialog(myWindow, true) Tạo JDialog cú tiờu đề định trước:

public JDialog(Frame parentWindow, String title, boolean isModal)

JDialog khụng thể gắn với Applet, muốn đưa ra một JDialog từ JApplet ta phải tạo ra một JFrame giả tạo.

Đưa đối tượng JDialog ra màn hỡnh bằng phương thức show(). Giấu cửa sổ JDialog ta dựng phương thức: hide().

Ẩn hiện JDialog ta cũn cú phương thức: setVisible(boolean).

Cỏc đặc điểm thường sử dụng với đối tượng JDialog thể hiện tương tự với JFrame. Lấy và thay đổi kớch thước JDialog: public setResizable(boolean), boolean isResizable() Đặt và lấy tiờu đề của JDialog: void setTitle(String), String getTitle();

Xỏc minh một JDialog đang thuộc dạng nào ta gọi phương thức: public boolean isModal() Chương trỡnh sau đõy sẽ ẩn hoặc hiện một Jdialog mỗi khi nhất vào một nỳt bấm:

import javax.swing.*; import java.awt.*; import java.awt.event.*;

public class FrameSample extends JFrame { private JDialog d;

public FrameSample() // Constroctor {

d = new JDialog(this,"Day la Jdialog",false); d.setSize(100,100);

JPanel p = new JPanel();

JButton b = new JButton("Xem/Tat mot JDialog"); b.addActionListener( new ActionListener()

{

public void actionPerformed(ActionEvent e) {

d.setVisible(!d.isVisible()); }

} );

p.add(b); add(p); }

public static void main(String[] argvs) {

FrameSample fs = new FrameSample(); fs.setSize(400,400);

fs.setVisible(true); }

}

II.4 JScrollPane

Đõy khụng phải là một cửa sổ nhưng cú tớnh chất như khung chứa JPanel dựng để chứa cỏc đối tượng. Tớnh chất khỏc là khi đối tượng nú chứa quỏ lớn thỡ JScrollPane sẽ xuất hiện thanh trượt đứng và ngang ở hai bờn viền để ta cú thể xem được toàn bộ. JScrollPane được ứng dụng trong cỏc danh sỏch chọn.

III. Giới thiệu về cỏc thành phần GUI cơ bản

• Jlabel: Chỉ một vựng hiển thị văn bản hoặc cỏc icon.

• JtextField: Chỉ một đối tượng cho phộp nhập dữ liệu từ bàn phớm. • JButton: Đối tượng nỳt bấm

• JcheckBox: Đối tượng nỳt chọn. • JcomboBox: Đối tượng ComboBox • Jlist: Danh sỏch

• JPanel: Nơi đặt cỏc thành phần GUI núi trờn.

III.1 Nỳt nhấn

Cỏch tạo nỳt nhấn

Ta gọi phương thức khởi dựng: public Button(String label) label là tờn nhón của nỳt nhấn Vớ dụ: Button nutOK = new Button("OK");

Đư nỳt nhấn vào Applet hay cửa sổ chương trỡnh bằng lệnh: add(nutOK);

Để đổi tờn nhón cho nỳt nhấn ta gọi phương thức public void setLabel(String newLabel). Để xem tờn nhón hiện tại của nỳt nhấn, ta gọi phương thức public String getLabel() Vớ dụ: Button nutOK = new Button(); nutOK.setLabel("OK");

Sử dụng nỳt nhấn

Khi kớch chuột vào nỳt nhấn sẽ thực hiện một cụng việc nào đú. Vấn đề này chỳng ta đó xem xột trong phần xử lý cỏc sự kiện

III.2 Nhón (Label)

Tạo nhón khụng cú nội dung gỡ: public Label() hoặc tạo nhón cú nội dung: public Label(String nameLabel).

hoặc thờm chế độ căn lề: pubic Label(String name, int align) Một số phương thức hay sử dụng:

setText(String nameLabel): Đặt lại nội dung mới cho nhón. Label.CENTER, Label.LEFT, Label.RIGHT: những giỏ trị căn lề.

Lấy nội dung hiện hành của nhón: public String getText();

Xem nhón đang được căn lề ở chế độ nào: public int getAlignment();

Thiết lập lại chế độ căn lề: public void setAlignment(int align) throws IlligalArgumentException

Sau đõy là vớ dụ sử dụng JLabel: // Minh họa về JLabel

// Nhập cỏc gúi thư viện import java.awt.*; import java.awt.event.*; // Gúi Java mở rộng import javax.swing.*;

public class LabelTest extends JFrame { private JLabel label1, label2, label3; // Tạo giao diện GUI

public LabelTest() {

super( "Testing JLabel" ); // Contructor của JFrame // Lấy đối tượng pane của một JFrame

Container container = getContentPane(); container.setLayout( new FlowLayout() ); // constructor của JLabel

label1 = new JLabel( "Label with text" );

label1.setToolTipText( "This is label1" ); // hiển thị khi di chuột đến container.add( label1 ); // thờm vào container

// Tạo Jlabel với icon hoặc text

Icon bug = new ImageIcon( "bug1.gif" );

label2 = new JLabel( "Label with text and icon", bug, SwingConstants.LEFT ); label2.setToolTipText( "This is label2" );

container.add( label2 ); // JLabel khụng tham số label3 = new JLabel();

label3.setText( "Label with icon and text at bottom" ); label3.setIcon( bug );

label3.setHorizontalTextPosition( SwingConstants.CENTER ); label3.setVerticalTextPosition( SwingConstants.BOTTOM ); label3.setToolTipText( "This is label3" );

container.add( label3 ); setSize( 275, 170 ); setVisible( true ); }

// hàm main

public static void main( String args[] ) {

LabelTest application = new LabelTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

} }

III.3 Nỳt đỏnh dấu (checkbox)

Một nỳt đỏnh dấu cú hai phần: nhón và dấu biểu hiện trạng thỏi. Ta cú thể tạo nỳt đỏnh dấu theo 5 phương thức khởi dựng:

• public Checkbox(): tạo ụ đỏnh dấu khụng cú nhón.

• public Checkbox(String cbLabel): tạo ụ đỏnh dấu với một nhón cbLabel gắn kốm. • public Checkbox(String cbLabel, boolean state): Tạo ụ đỏnh dấu với một nhón

cbLabel gắn kốm với trạng thỏi ban đầu của ụ đú.

• public Checkbox(String cbLabel, boolean state, CheckboxGroup g);

• public Checkbox(String cbLabel , CheckboxGroup g, boolean state): dựng để tạo ụ đỏnh dấu cú nhón với trạng thỏi đỏnh dấu ban đầu, nỳt tạo ra được nhúm trong nhúm g. Nhúm cỏc ụ đỏnh dấu trở thành nỳt chọn.

Kiểm tra và thiết lập trạng thỏi:

Để kiểm tra một ụ cú được đỏnh dấu khụng ta dựng phương thức: public boolean getState();

Nếu muốn thiết lập trạng thỏi, ta dựng phương thức: setState(boolean state).

Xử lý tỡnh huống khi ụ đỏnh dấu thay đổi trạng thỏi:

Để lắng nghe ụ đỏnh dấu, ta dựng phương thức: addItemListener(ItemListener L) Để loại bỏ lắng nghe đú ta dựng phương thức: removeItemListener(ItemListener L)

// Java core packages import java.awt.*; import java.awt.event.*; // Java extension packages import javax.swing.*;

public class CheckBoxTest extends JFrame { private JTextField field;

private JCheckBox bold, italic; // Thiết lập GUI

public CheckBoxTest() {

super( "JCheckBox Test" ); // lấy pane

Container container = getContentPane(); container.setLayout( new FlowLayout() ); // Đặt ụ nhập và font chữ

field = new JTextField( "Theo dừi font chữ thay đổi", 20 ); field.setFont( new Font( "Serif", Font.PLAIN, 14 ) ); container.add( field );

// tạo đối tượng checkbox

bold = new JCheckBox( "Bold" ); container.add( bold );

italic = new JCheckBox( "Italic" ); container.add( italic );

// Đăng ký đối tượng lắng nghe

CheckBoxHandler handler = new CheckBoxHandler(); bold.addItemListener( handler ); italic.addItemListener( handler ); setSize( 275, 100 ); setVisible( true ); } // execute application

public static void main( String args[] ) {

CheckBoxTest application = new CheckBoxTest();

application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }

// Lớp nội lắng nghe sự kiện

private class CheckBoxHandler implements ItemListener { private int valBold = Font.PLAIN;

private int valItalic = Font.PLAIN; // Đỏp ứng sự kiện chọn ụ

public void itemStateChanged( ItemEvent event ) { // xử lý chọn ụ chữ đậm if ( event.getSource() == bold ) if ( event.getStateChange() = = ItemEvent.SELECTED ) valBold = Font.BOLD; else valBold = Font.PLAIN; // Chọn ụ chứ nghiờng 118

III.4 Nỳt chọn (radio button)

Tạo nỳt chọn:

Đõy là trường hợp đặc biệt của ụ đỏnh dấu. Ta tạo ra ụ đỏnh dấu và đặt nú vào một nhúm, ta cú phương thức sau: public CheckboxGroup();

Với một nhúm cỏc nỳt ta cú thể lấy ra đối tượng hiện tại đang được chọn bằng cỏch gọi phương thức getSelectedCheckbox().

Đặt lựa chọn ta dựng: setSelectedCheckbox().

Cỏch sử dụng nỳt chọn:

Ta tạo một đối tượng giao tiếp ItemListener để lắng nghe tỡnh huống.

Phương thức getItemSelectable sẽ trả về đối tượng nơi mà tỡnh huống phỏt sinh:

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 107 - 148)