Lập trình Java - 27

g.setXORMode (Color.magenta); g.fillRoundRect (90, 180, 60, 40, 50, 20);

}


public static void main (String args[])

{


new PaintMode();

}

}


Kết quả của chương trình trên:


Hình 5 9 Kết quả chạy ví dụ 5 8 5 2 Java Swing 5 2 1 Giới thiệu về Swing Phần 1


Hình 5.9. Kết quả chạy ví dụ 5.8

5.2. Java Swing

5.2.1 Giới thiệu về Swing


Phần trên chúng ta đã xây dựng giao diện người dùng với các lớp AWT. Bây giờ chúng ta sẽ xem xét khái niệm Swing. Swing là một bộ các lớp cung cấp các thành phần mạnh và linh hoạt hơn AWT. Ngoài các thành phần quen thuộc như nút nhấn, hộp kiểm tra và nhãn, Swing còn hỗ trợ các bảng thẻ, bảng cuộn, cây và bảng. Chính các thành phần quen thuộc như các nút nhấn có nhiều khả năng hơn trong Swing. Ví dụ, một nút nhấn có thể có hình ảnh và một chuỗi văn bản tương ứng với nó. Hình ảnh này có thể được thay đổi khi trạng thái của nút nhấn thay đổi.

Không giống các thành phần AWT, các thành phần Swing không thi hành bằng đoạn mã đặc tả nền. Thay vì thế chúng được viết hoàn toàn bằng Java, vì thế là độc lập với hệ thống.

Các lớp và giao diện trong Swing quan trọng, và chương này trình bày một vài khía cạnh tổng quát. Swing là một lãnh vực mà bạn muốn tìm hiểu nhiều hơn theo cách riêng của bạn.

Các lớp thành phần Swing được sử dụng trong cuốn sách này được trình bày như sau:

Diễn giải

AbstractButton

Tách các phân lớp cho các nút nhấn Swing

ButtonGroup

Tóm lược một bộ các nút nhấn loại trừ lẫn nhau

ButtonGroup

Tóm lược một bộ các nút nhấn loại trừ lẫn nhau

ImageIcon

Tóm lược một biểu tượng

JApplet

Phiên bản Swing của Applet

Jbutton

Lớp nút nhấn Swing

JcheckBox

Lớp hộp kiểm tra Swing

JComboBox

Tóm lược một combo box (sự kết hợp của danh sách thả xuống và văn bản )

JLabel

Phiên bản Swing của nhãn

JRadioButton

Phiên bảng Swing của radio

JScrollPane

Tóm lược một cửa sổ cuộn

JTabbedPane

Tóm lược một cửa số thẻ Jtable Tóm lược bộ điều khiển bảng cơ sở

JTextField

Phiên bảng swing của văn bản

JTree

Tóm lược sự điều khiển cây cơ sở

Có thể bạn quan tâm!

Xem toàn bộ 267 trang tài liệu này.

Lớp

Bảng 5.5. Các lớp thành phần Swing

Các lớp quan hệ Swing được lưu trong javax.swing và các gói của nó như javax.swing.tree. Nhiều lớp quan hệ Swing và giao diện tồn tại mà không được xem xét trong chương này. Phần còn lại của chương trình này xem xét các thành phần Swing khác nhau và minh họa chúng thông qua các applet.

5.2.2. Các biểu tượng và nhãn

Trong Swing, biểu tượng được tóm lược bởi lớp ImageIcon, vẽ một biểu tượng từ một hình ảnh. Hai construstor của nó như sau:

ImageIcon (String filename)

ImageIcon (URL url)

Hàm thứ nhất sử dụng hình ảnh trong tập tin tên là filename.

Hàm

Hàm thứ hai sử dụng hình ảnh trong resource được nhận biết bằng url.

Diễn giải

Trả về số pixel là chiều cao của biểu tượng

Int getIconWeight()

Trả về số pixel là chiều rộng của biểu tượng

Int paintIcon(Component

comp. Graphics g, int x, int y)

Vẽ biểu tượng tại vị trí x,y trên đồ họa g. thông tin về thao tác vẽ được cung cấp trong comp.

Int getIconHeight()

Bảng 5.6. Các hàm sử dụng của JLabel

Các nhãn Swing là trường hợp của lớp JLabel, thừa kế từ Jcomponent. Nó có thể hiển thị văn bản và hay một biểu tượng. Các constructor của nó như sau:

JLabel(Icon i)

JLabel (String s)

JLabel (String s, int align)

Ở đây, s và i là văn bản và biểu tượng sử dụng cho nhãn. Thông số align là LEFT, RIGHT hay CENTER. Các hằng số này được định nghĩa trong giao diện SwingConstants, cùng với những cái khác sử dụng bởi các lớp Swing. Biểu tượng và văn bản tương ứng với nhãn có thể đọc và ghi bằng các hàm sau:

Icon getIcon()

String getText()

Void setIcon(Icon i)

Void setText(String s)

Ở đây, i và s là biểu tượng và văn bản.

Ví dụ 5.9: Tạo ra một nhãn sử dụng Swing

import javax.awt.*; import javax.swing.*;

public class JLabelDemo extends Japplet { public void init() {

Container contentPane= getContentPane(); ImageIcon ii=new ImageIcon("france.gif");

Jlabel jl=new Jlabel ("France",ii, Jlabel,CENTER);

contentPane.add(ji);

}

}

5.2.3. Các trường văn bản

Các trường văn bản Swing được tóm lược bởi lớp JTextCompnent, thừa kế từ JComponent. Nó cung cấp các chức năng chung cho các thành phần văn bản Swing.

Một lớp con của nó là JTextField, cho phép bạn chỉnh sửa một dòng của văn bản. Các constructor của nó là:

JTextField()

JTextField(int cols)

JTextField(String s, int cols)

JTextField(String s)

Ở đây, s là chuỗi đang được xét, và cols là số cột trong trường văn bản.

Ví dụ 5.10 minh họa cách tạo một trường văn bản. Applet bắt đầu bằng cách lấy content pane của nó, và sau đó một sắp xếp được ấn định như layout manager của nó. Kế tiếp một đối tượng JTextField được tạo và được gắn vào content pane.

import javax.awt.*; import javax.swing.*;

public class JTextFieldDemo extends JApplet { JTextField jtf;

public void init() {

Container contentPane= getContentPane(); contentPane.setLayout(new FlowLayout()); jtf=new JTextField(15); contentPane.add(jtf);

}

}

5.2.4. Nút nhấn

Các nút nhấn Swing cung cấp các đặc tính mà không tìm thấy trong lớp Button được định nghĩa bởi AWT. Ví dụ, bạn có thể kết hợp một biểu tượng với một nút nhấn Swing. Nút nhấn Swing là phân lớp của lớp AbtractButton, là lớp thừa kế từ Jcomonent. AbtractButton, gồm nhiều hàm cho phép bạn điều khiển hoạt động của các nút nhấn, hộp kiểm tra, và nút radio. Ví dụ, bạn có thể định nghĩa các biểu tượng khác nhau để hiển thị cho các thành phần khi nó được kích hoạt, được nhấn hay được chọn. Biểu tượng khác có thể được sử dụng như một biểu tượng "di động qua", nó được hiển thị khi chuột di chuyển đến thành phần đó. Sau đây là các hàm điều khiển các hoạt động này:

void setDisabledIcon(Icon di)

void setPressadIcon(Icon pi)

void setSelectedIcon(Icon si)

void setRolloverIcon(Icon ri)

Ở đây, di, pi, si và ri là các biểu tượng được sử dụng cho các điều kiện khác nhau.

Văn bản tương ứng với một nút nhấn có thể đọc hay ghi thông qua các hàm sau:

String getText()

void setText(String s)

Ở đây, s là văn bản ứng với nút nhấn.

Phân lớp cụ thể của AbstractButton tạo ra các sự kiện khi chúng được nhấn. Bộ theo dòi ghi và tháo bỏ các sự kiện của chúng thông qua các hàm sau:

void addActionListener(ActionListener al) void removeActionListener(ActionListener al) Ở đây, al là bộ theo dòi hoạt động.

AbstractButotn là lớp con của nút nhấn, hộp kiểm tra và nút radio. Mỗi trường hợp sẽ được xem xét kế tiếp.

5.2.5. Lớp JButton

Lớp JButton cung cấp chức năng của một nút nhấn. JButton cho phép một biểu tượng, một chuỗi, hay cả hai tương ứng với nút nhấn. Các constructor của nó là:

JButton(Icon i)

JButton(String s)

JButton(String s, Icon i)

Ở đây s và i là chuỗi và biểu tượng sử dụng cho nút nhấn.

5.2.6. Hộp kiểm tra

Lớp JcheckBox cung cấp chức năng của một hộp kiểm tra, là một lớp con cụ thể của AbstractButton. Các constructor của nó là: JCheckBox(Icon i)

JCheckBox(Icon I, boolean state)

JCheckBox(String s)

JCheckBox(String s, boolean state)

JCheckBox(String s, Icon i)

JCheckBox(String s, Icon I, boolean state)

Ở đây, i là biểu tượng của nút nhấn. Văn bản được xác định bởi s. nếu state là true, lúc đầu hộp kiểm tra sẽ được chọn. Ngược lại, nó sẽ không được chọn.

Trang thái của hộp kiểm tra có thể thay đổi thông qua hàm sau: void setSelacted(boolean state)

Ở đây state là true nếu hộp kiểm tra sẽ được đánh dấu.

5.2.7. Radio Button

Radio button được cung cấp bởi lớp JradioButton, là sự thi hành cụ thể của AbstractButton. Các constructor của nó là: JRadioButton(Icon i)

JRadioButton(Icon I, boolean state)

JRadioButton(String s)

JRadioButton(String s boolean state)

JRadioButton(String s, Icon i)

JRadioButton(String s, Icon I, boolean state)

Ở đây i là biểu tượng của button. Văn bản được xác định bởi s. Nếu state là true, lúc đầu button được chọn. Ngược lại nó không được chọn.

Nút radio được xác định như một nhóm. Chỉ một button trong nhóm có thể được chọn vào một thời điểm. Ví dụ, nếu người dùng nhấn một nút radio trong một nhóm, bất kỳ nút nào trong nhóm đó đã được chọn trước cũng tự động không được chọn nữa. Lớp ButtonGroup tạo một nhóm button. Constructor mặc định của nó cần cho mục đích này. Sau đó các thành phần được thêm vào nhóm button thông qua hàm sau:

void add(AbstractButton ab)

Ở đây ab là một tham chiếu đến button được thêm vào nhóm.

5.2.8. ComboBox

Swing cung cấp một ComboBox (một sự kết hợp của một trường văn bản và một danh sách thả xuống) thông qua lớp JComboBox, thừa kế từ Jcomponent. Một ComboBox bình thường hiển thị một danh sách thả xuống để cho phép người dùng chọn một thực thể khác. Bạn có thể nhập sự lựa chọn của bạn vào trường văn bản. Hai constructor của JComboBox là: JComboBox() , JComboBox (Vector v)

Ở đây, v là một vector khởi tạo combo box.

Các mục được thêm vào danh sách chọn thông qua hàm addItem(), cách thức như

sau:


void add Item(Object obj)

Ở đây obj là đối tượng thêm vào combo box


5.2.9. Tabbed Pane

Một Tabbed Pane là một thành phần được hiển thị như một nhóm các folders trong một tập tin cabinet. Mỗi folder có một tên. Khi người dùng chọn một folder, nội

dung của nó sẽ được kích hoạt. Chỉ một folder có thể được chọn tại một thời điểm. Tabbed pane được sử dụng để xác định cấu hình các phần.

Tabbed pane được tóm lược bởi lớp JTabbedPane, thừa kế từ Jcomponent. Chúng ta sẽ sử dụng constructor mặc định của nó. Tab được định nghĩa thông qua hàm sau:

void addtab(String str, Component comp)

Ở đây str là tên của tab, và comp là thành phần sẽ được thêm vào tab. Một Jpanel hay một phân lớp của nó được thêm vào.

Thủ tục chung để sử dụng một Tabbed pane trong một applet gồm các bước sau: Tạo một đối tượng JTabbedPane

Gọi hàm addTab() để thêm một tab vào panel. (Các thông số đến hàm này định nghĩa tựa đề của tab và thành phần của nó).

Lặp lại bước hai cho mỗi tab

Thêm tabbed pane cho content pane của applet.

5.2.10. Scroll Pane

Scroll pane là một thành hiển thị một vùng hình chữ nhật trong một thành phần có thể nhìn thấy. Các thanh cuộn dọc và ngang có thể được cung cấp nếu cần thiết. Scroll pane thi hành trong Swing bởi lớp JScrollPane, là lớp mở rộng Jcomponent. Các constructor của nó là:

JScrollPane(Component comp)

JScrollPane(int vsb, int hsb)

JScrollPane(Component comp, int vsb, int hsb)

Ở đây comp là thành phần được thêm vào scroll pane. Vsb và hsb là các hằng số kiểu int được định nghĩa khi thanh cuộn ngang và dọc của scroll pane này hiển thị. Các trường hợp của các hằng số này được trình bày như sau:

Hằng số

Diễn giải

HORIZONTAL_SCROLLBAR_ALWAYS

Luôn cung cấp thanh cuộn ngang

HORIZONTAL_SCROLLBAR_AS_NEEDED

Cung cấp thanh cuộn ngang, nếu cần

VERTICAL_SCROLLBER_ALWAYS

Luôn cung cấp thanh cuộn dọc

HORIZONTAL_SCROLLBAR_AS_NEEDED

Cung cấp thanh cuộn dọc, nếu cần

Bảng 5.7. Các hằng số

Sau đây là các bước mà bạn sẽ sử dụng một Jscroll pane trong một applet:

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

2. Tạo một đối tượng JScrollPane. Các thông số của constructor xác định thành phần và sự kiểm soát của thanh cuộn doc và ngang.

3. Thêm JscrollPane vào ContentPane của applet này.

5.2.11. Cây

Cây là một thành phần miêu tả một sự hiển thị có thứ tự của dữ liệu. Người dùng có thể mở rộng hay thu nhỏ các cây con riêng lẻ trong các hiển thị này. Cây thực hiện trong Swing bởi lớp JTree là một lớp mở rộng của JComponent. Các constructor của nó là:

JTree(Hashtable ht)

JTree(Object obj[])

JTree(TreeNode tn)

JTree(Vector v)

Hàm thứ nhất tạo một cây trong đó mỗi thành phần của bảng băm là một nút con. Trong hàm thứ hai mỗi thành phần của mảng obj là một nút con. Trong hàm thứ ba nút cây tn là gốc của cây. Hàm cuối cùng sử dụng các thành phần của vector v như các nút con.

Một đối tượng JTree phát sinh các sự kiện khi một nút được mở rộng hay thu nhỏ. Các hàm addTreeExpansionListener() và removeTreeExpansion Listener () cho phép bộ theo dòi ghi nhận và tháo bỏ sự khai báo này. Dạng của các hàm này như sau:

void addTreeExpansionListener(TreeExpansionListener tel)

void removeTreeExpansionListener(TreeExpansionListener tel) Ở đây tel là đối tượng theo dòi.

Hàm getPathForLocation() sử dụng để di chuyển chuột dựa vào một vị trí đặc biệt của cây theo một hướng đi của cây. Dạng của nó như sau:

TreePath getPathForLocation(int x, int y)

Ở đây x và y là các tọa độ mà chuột sẽ nhấp vào. Giá trị trả về là một đối tượng TreePath, đối tượng này tóm lược thông tin về nút cây được chọn bởi người dùng.

Xem toàn bộ nội dung bài viết ᛨ

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 15/07/2022