swing là gì

29
Swing là gì ? Nếu bạn đã từng vào trang chủ của Java (http://java.sun.com ), bạn sẽ nhìn thấy Swing được mô tả như là một tập các thành phần đồ họa được tạo ra để những cảm quan (Look&Feel) được thể hiện vào thời điểm runtime. Thật sự, thì Swing còn nhiều hơn như thế. Swing là bộ công cụ GUI thế hệ kế tiếp mà Sun Microsystems tạo ra cho phép môi trường phát triển enterprise trong Java.Bằng môi trường phát triển enterprise, chúng ta hiểu rằng, các lập trình viên có thể sử dụng Swing để tạo ra các ứng dụng Java có khả năng mở rộng với một dãy nhiều thành phần mạnh mẽ. Thêm vào đó, bạn có thể kế thừa hoặc chỉnh sửa những thành phần này để điều khiển việc hiển thị và các hành xử của chúng. Swing không phải là một từ viết tắt. Đó là tên thay thế cho một tập hợp lựa chọn của nó cho các designer khi dự án được thực hiện vào 1996. Swing thật sự là một phần của gia đình rộng lớn các sản phẩm của Java được biết đến như Java Foundation Classes s(JFC) bao gồm nhiều đặc điểm của Internet Foundation Classes của Netscape cũng như bị ảnh hưởng thiết kế của Taligent và Lighthouse Design của IBM. Swing được phát triển thật sự kể từ thời điểm bản beta của JDK 1.1, khoảng mùa xuân 1997. Swing API bản beta đưa ra khoảng nửa cuối 1997 và được chính thức phát hành vào tháng 3 năm 1998. Khi được phát hành, các thư viện của Swing 1.0 chứa khoảng 250 lớp và 80 giao tiếp. Sự phát triển được tiếp tục khi theo thời gian, bản Swing 1.4 chứa 85 giao tiếp public và 451 lớp public. Mặc dù Swing là được phát triển đơn lẻ từ lõi của Java Development Kit, nó yêu cầu phải có tối thiểu JDK 1.1.5 để chạy. Swing được xây dựng dựa trên những mô hình event được giới thiệu trong serie JDK 1.1. Bạn không thể sử dụng Swing với JDK 1.0.2, thêm vào đó bạn phải có Java 1.1 cho phép trình duyệt hỗ trợ Swing Applet. Java 2 SDK 1.4 được phát hành bao gồm nhiều lớp Swing được cập nhật và hỗ trợ một vài đặc điểm mới. Swing được tích hợp đầy đủ trong cả trong bộ công cụ của các nhà phát triển và runtime environment của tất cả các bản phát hành Java 2 (SDK 1.2 và những phiên bản cao hơn) chứa cả Java Plug-in. Java Foundation Classes là gì? FC là một nhóm các thư viện được thiết kế để hỗ trợ lập trình viên tạo ra các ứng dụng enterprise với Java. Swing chỉ là một trong năm thư viện tạo nên JFC. JFC cũng chứa Abstract Window Toolkit (AWT), Accessibility API, 2D API và tăng cường hỗ trợ khả năng kéo thả (Drag and Drog). 1.AWT Là bộ công cụ GUI cơ bản được đóng gói với tất cả các phiên bản của JDK. Trong khi Swing lại không sử dụng lại bất kỳ thành phần AWT cũ hơn. 2.Accessibility

Upload: nguyen-diep

Post on 09-Mar-2015

898 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Swing là gì

Swing là gì ?

Nếu bạn đã từng vào trang chủ của Java (http://java.sun.com), bạn sẽ nhìn thấy Swing được mô tả như là

một tập các thành phần đồ họa được tạo ra để những cảm quan (Look&Feel) được thể hiện vào thời điểm

runtime.

Thật sự, thì Swing còn nhiều hơn như thế. Swing là bộ công cụ GUI thế hệ kế tiếp mà Sun Microsystems tạo

ra cho phép môi trường phát triển enterprise trong Java.Bằng môi trường phát triển enterprise, chúng ta hiểu

rằng, các lập trình viên có thể sử dụng Swing để tạo ra các ứng dụng Java có khả năng mở rộng với một dãy

nhiều thành phần mạnh mẽ. Thêm vào đó, bạn có thể kế thừa hoặc chỉnh sửa những thành phần này để điều

khiển việc hiển thị và các hành xử của chúng.

Swing không phải là một từ viết tắt. Đó là tên thay thế cho một tập hợp lựa chọn của nó cho các designer khi

dự án được thực hiện vào 1996. Swing thật sự là một phần của gia đình rộng lớn các sản phẩm của Java

được biết đến như Java Foundation Classes s(JFC) bao gồm nhiều đặc điểm của Internet Foundation

Classes của Netscape cũng như bị ảnh hưởng thiết kế của Taligent và Lighthouse Design của IBM.

Swing được phát triển thật sự kể từ thời điểm bản beta của JDK 1.1, khoảng mùa xuân 1997. Swing API bản

beta đưa ra khoảng nửa cuối 1997 và được chính thức phát hành vào tháng 3 năm 1998. Khi được phát

hành, các thư viện của Swing 1.0 chứa khoảng 250 lớp và 80 giao tiếp. Sự phát triển được tiếp tục khi theo

thời gian, bản Swing 1.4 chứa 85 giao tiếp public và 451 lớp public.

Mặc dù Swing là được phát triển đơn lẻ từ lõi của Java Development Kit, nó yêu cầu phải có tối thiểu JDK

1.1.5 để chạy. Swing được xây dựng dựa trên những mô hình event được giới thiệu trong serie JDK 1.1. Bạn

không thể sử dụng Swing với JDK 1.0.2, thêm vào đó bạn phải có Java 1.1 cho phép trình duyệt hỗ trợ Swing

Applet.

Java 2 SDK 1.4 được phát hành bao gồm nhiều lớp Swing được cập nhật và hỗ trợ một vài đặc điểm mới.

Swing được tích hợp đầy đủ trong cả trong bộ công cụ của các nhà phát triển và runtime environment của tất

cả các bản phát hành Java 2 (SDK 1.2 và những phiên bản cao hơn) chứa cả Java Plug-in.

Java Foundation Classes là gì?

FC là một nhóm các thư viện được thiết kế để hỗ trợ lập trình viên tạo ra các ứng dụng enterprise với Java.

Swing chỉ là một trong năm thư viện tạo nên JFC. JFC cũng chứa Abstract Window Toolkit (AWT),

Accessibility API, 2D API và tăng cường hỗ trợ khả năng kéo thả (Drag and Drog).

1.AWT

Là bộ công cụ GUI cơ bản được đóng gói với tất cả các phiên bản của JDK. Trong khi Swing lại không sử

dụng lại bất kỳ thành phần AWT cũ hơn.

2.Accessibility

Gói accessibility cung cấp việc hỗ trợ người dùng gặp rắc rối với giao tiếp người dùng truyền thống. Các công

cụ accessibilty có thể được sử dụng trong việc kết nối với các thiết bị như bộ đọc âm thanh hay bàn phím

braille (dành cho người khiếm thị) cho phép truy cập trực tiếp vào các thành phần Swing.

Accessibility được chia ra làm 2 phần: Accessibility API được đóng gói với việc phân phối Swing, và

Accessibility Utilities API được phân phối riêng. Tất cả các thành phần Swing đều hỗ trợ accessibility.

3.2D API

Page 2: Swing là gì

Chứa các lớp bổ sung cho các kiểu vẽ khác nhau, màu sắc, font chữ và những mô hình phức tạp. Gói Java

này dựa trên API đã có bản quyền từ Taligent của IBM. Các lớp của 2D API không phải là một phần của

Swing.

4.Drag and Drop

DnD là một trong những cách nói ẩn dụ được sử dụng trong các giao tiếp đồ họa ngày nay. Người dùng được

phép click và giữ một đối tượng GUI, di chuyển nó đến một frame khác hoặc một cửa sổ trên desktop với một

kết quả có thể đoán trước được.

DnD API cho phép người dùng bổ sung các thành phần có thể kéo thả nhằm trao đổi thông tin giữa các ứng

dụng Java và các ứng dụng native. Mặc dù DnD không phải là một phần của Swing, nó vẫn rất quan trọng

trong những sản phẩm ứng dụng mang tính thương mại.

5.Internationalization (tính quốc tế hóa)

Cho phép các nhà phát triển có thể xây dựng các ứng dụng có thể tương tác với người dùng toàn cầu trong

ngôn ngữ của chính họ. Với input method framework, các nhà phát triển có thể xây dựng các ứng dụng chấp

nhận các văn bản có thể sử dụng đến hàng ngàn ký tự khác nhau như tiếng Nhật, tiếng Hàn, và tiếng Trung

Quốc.

Swing là gì ? Cách sử dụng các thành phần cơ bản của Swing.

1. Swing là gì ?

Swing là bộ công cụ GUI thế hệ kế tiếp mà Sun Microsystems tạo ra cho phép môi trường phát triển

enterprise trong Java.Bằng môi trường phát triển enterprise, chúng ta hiểu rằng, các lập trình viên có thể sử

dụng Swing để tạo ra các ứng dụng Java có khả năng mở rộng với một dãy nhiều thành phần mạnh mẽ.

Thêm vào đó, bạn có thể kế thừa hoặc chỉnh sửa những thành phần này để điều khiển việc hiển thị và các

hành xử của chúng.

Swing không phải là một từ viết tắt. Đó là tên thay thế cho một tập hợp lựa chọn của nó cho các designer khi

dự án được thực hiện vào 1996. Swing thật sự là một phần của gia đình rộng lớn các sản phẩm của Java

được biết đến như Java Foundation Classes s(JFC) bao gồm nhiều đặc điểm của Internet Foundation

Classes của Netscape cũng như bị ảnh hưởng thiết kế của Taligent và Lighthouse Design của IBM. Swing

được phát triển thật sự kể từ thời điểm bản beta của JDK 1.1, khoảng mùa xuân 1997. Swing API bản beta

đưa ra khoảng nửa cuối 1997 và được chính thức phát hành vào tháng 3 năm 1998. Khi được phát hành, các

thư viện của Swing 1.0 chứa khoảng 250 lớp và 80 giao tiếp. Sự phát triển được tiếp tục khi theo thời gian,

bản Swing 1.4 chứa 85 giao tiếp public và 451 lớp public.

Mặc dù Swing là được phát triển đơn lẻ từ lõi của Java Development Kit, nó yêu cầu phải có tối thiểu JDK

1.1.5 để chạy. Swing được xây dựng dựa trên những mô hình event được giới thiệu trong serie JDK 1.1. Bạn

không thể sử dụng Swing với JDK 1.0.2, thêm vào đó bạn phải có Java 1.1 cho phép trình duyệt hỗ trợ Swing

Applet. Java 2 SDK 1.4 được phát hành bao gồm nhiều lớp Swing được cập nhật và hỗ trợ một vài đặc điểm

mới. Swing được tích hợp đầy đủ trong cả trong bộ công cụ của các nhà phát triển và runtime environment

của tất cả các bản phát hành Java 2 (SDK 1.2 và những phiên bản cao hơn) chứa cả Java Plug-in.

2. JSlider

JSider là một thành phần của Swing giúp cho người dùng có thể lựa chọn một giá trị

số trong khoảng giá trị người lập trình đặt ra. Lợi ích của JSlider là có thể biểu diển

giá trị số của người dùng nhập và bằng giao diện trực quan, giúp dữ liệu toàn vẹn.

Page 3: Swing là gì

- Cách tạo và sử dụng JSlider trong Netbean

Tạo một Jframe form mới, mình đặt tên là Demo_JSlider, chọn và kéo icon JSlider

trong Palette/ Swing Control của Netbean vào trong Jframe

This image has been resized. Click this bar to view the full image. The original image is sized 1016x478px.

Chúng ta cùng tìm hiều những thuộc tính cơ bản của JSlider trong Netbean

—— Thuộc tính maximum : là giá trị lớn nhất của Slider

—— Thuộc tính minimum : là giá trị nhỏ nhất của Slider

—— Thuộc tính value: là giá trị hiện thời của Slider

—— Thuộc tính majorTickSpacing: là khoảng cách của từng giá trị trong Slider

—— Thuộc tính paintLabels : dùng để hiện thị giá trị số ở dưới JSlider

—— Thuộc tính paintLabels : dùng để hiện thị đánh dấu từng mứcị giá trị của JSlider

—— Thuộc tính paintTrack : dùng để hiện thị thanh trượt của JSlider

Bây giờ chúng ta sẽ tạo ra 1 textfield và khi người dùng thay đổi giá trị của Slider thì giá trị sẽ hiện thị trong Slider

– Chọn Event cho JSlider là Statechange : cllick phải vào JSlider chọn events/ change/

statechange

This image has been resized. Click this bar to view the full image. The original image is sized 845x560px.

Page 4: Swing là gì

– Gõ nội dung sự kiện cho statechange

Code:

this.t1.setText(this.sli.getValue()+"");

Note: t1 là Jtextfield, Sli là JSlide

r—

Kết quả :

3. Timer

Swing Timer phát sinh một hoạt nhiều sự kiện ActionEvent sau một khoảng thời gian xác định. Timer có thể

được cấu hình để phát sinh sự kiện lập lại nhiều lần hoạt chỉ một lần duy nhất. Để sử dụng Timer bạn phải

xác định thời gian phát sinh bằng mini giây và lắng nghe sự kiện ActionListener

Page 5: Swing là gì

Lợi ích của Timer: nó dùng để đặt bẩy trong một thời gian xác định sẽ phát sinh, chúng ta có thể sử dụng nói

để làm soft về thi, quy định thời gian làm bài, chương trình tính giờ, đồng hồ “tự chế”…

Bây giờ mình sẽ demo cho các bạn một chương trình nhỏ về timer để đếm thời gian theo giây nhé

- Tạo Jframe mới (dĩ nhiên rồi).

- Mình sẽ tạo ra giao diện như thế này.

Khi chúng ta bấm nút bất đầu thì timer bắt đầu chạy, khi bâm nút ngừng hoạt stop thì timer sẽ ngừng.

Bất đầu nhé !

Chúng ta tạo một biến Timer và 2 biến Integer đại diện cho phút và giây toàn cục

Code:

Timer thoigian;

Integer second;

Integer mini;

Khởi tạo và set đối tượng cho Timer trong hàm khởi tạo

Code:

second=0;

mini=0;

thoigian= new Timer(1000, new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String temp=mini.toString();

String temp2=second.toString();

if(temp.length()==1)

{

temp="0"+temp;

}

if(temp2.length()==1)

{

temp2="0"+temp2;

}

Page 6: Swing là gì

if(second==59)

{

dem.setText(temp+" : "+temp2);

mini++;

second=0;

}else

{

dem.setText(temp+" : "+temp2);

second++;

}

}

});

Hàm trên có y nghĩa sẽ đếm số giây và giây lớn hơn 59 sẽ cộng dồn sang phút và set cho “dem” là biến đếm

thời gian

Khi bấm nút “Bất đầu” thì ta sẽ khởi chạy Timer

Code:

thoigian.start();

Khi bấm nút “Ngừng” thì ta sẽ tạm ngừng timer, và khi bấm “Bất đầu” lại thì nó đếm tiếp

Code:

thoigian.stop();

Khi bấm nút “Kết Thúc” thì ta sẽ tạm ngừng Timer và đồng tời set 2 biến mini và second thành giá tri 0, nếu

bấm lại nút “Bất đầu” thì giá trị sẽ set lại 00:00

Code:

thoigian.stop();

mini=0;

second=0;

Đây là kết quả của quá tình trên

Page 7: Swing là gì

Những đặc điểm của Swing

Swing cung cấp các đặc điểm để viết những ứng dụng có khả năng mở rộng trong Java. Dưới đây là một

trong những đặc điểm phổ biến

1.Cảm quan pluggable

Một trong những tính thể hiện thú vị nhất ở các lớp Swing là khả năng viết những cảm quan (Look&Feels) cho

mỗi thành phần, thậm chí thay đổi cảm quan vào thời điểm runtime. L&Fs trở thành một vấn đề quan trọng

trong việc phát triển GUI qua 10 năm.

Nhiều người dùng quen thuộc với kiểu giao diện Motif phổ biến trong Windows 3.1 và vẫn còn sử dụng rộng

rãi trong platform Unix. Microsoft tạo ra L&F nhỏ gọn hơn trong các hệ điều hành 95/98/NT/2000 của họ.

Ngoài ra, hệ thống máy tính Macintosh cũng có một L&F được thiết kế riêng mà hầu hết người dùng Apple

đều cảm thấy thoải mái với chúng.

Swing có khả năng thể hiện nhiều L&F khác nhau và hiện tại hỗ trợ các L&F bao gồm Windows, Unix Motif và

Java Metal là L&F mặc định. Thêm vào đó, Swing cho phép người dùng chuyển đổi L&F vào thời điểm

runtime mà không phải đóng ứng dụng.

Theo cách này, một người dùng sẽ thử xem cảm quan nào là thể hiện tốt nhất đối với họ. Và nếu bạn cảm

thấy bạn thật sự có tham vọng là một nhà phát triển, bạn hãy tạo L&F cho riêng bạn đối với mỗi thành phần

Swing.

2.Các thành phần lightweight

Hầu hết các thành phần Swing đều không nặng nề. Theo nghĩa đen, nghĩa là những thành phần này độc lập

trên những L&F hiển thị chúng. Thay vào đó, chúng sử dụng môi trường đồ họa gốc đơn giản để vẽ chúng

trên màn hình.

Khả năng tạo ra những thành phần lightweight lần đầu tiên được đề cập trong JDK 1.1, mặc dù những thành

phần AWT chính lại không nhận được những đặc điểm tiện lợi của nó. Trước đó, các lập trình viên không có

một sự lựa chọn nào nhưng có những lớp con java.awt.Canvas hoặc java.awt.Panel để những lập trình viên

có thể tạo ra những thành phần của riêng họ.

Từ 2 lớp này, Java xác định một đối tượng opaque từ hệ điều hành đang chạy để thay thế thành phần này,

tác động mạnh đến mỗi thành phần để tương tác nếu như bản thân nó là cửa sổ, và vì thế sẽ được đặt trên

hình chữ nhật, đường viền đơn (solid). Vì thế những thành phần này mang tên gọi “heavyweight” bởi vì chúng

nắm giữ những phần mở rộng ở mức độ gốc mà Java không sử dụng.

Với các thành phần lightweight, mỗi thành phần thể hiện bản thân nó bằng cách sử dụng đồ họa gốc của đối

tượng Graphics. Chúng luôn thể hiện bản thân chúng trên bề mặt của các thành phần heavyweight cao nhất

mà chúng được chứa trong đó. Những lớp này cho phép các lập trình viên thể hiện một cách nhanh chóng

ngữ cảnh đồ họa của khung chứa (container).

Kết quả là những thành phần tiết kiệm được vùng nhớ, chạy nhanh hơn những gì có sẵn trước đó trong Java.

Hầu hết các thành phần Swing là lightweight, chỉ có một vài container top-level là không phải. Thiết kế này

cho phép các lập trình viên vẽ và vẽ lại L&F của ứng dụng của họ vào thời điểm runtime kết hợp chúng vào

cảm quan của hệ điều hành chạy ứng dụng đó. Thêm vào đó, cách thiết kế các thành phần Swing cho phép

hỗ trợ dễ dàng chỉnh sửa cách hành xử của các thành phần.

Page 8: Swing là gì

3.Các đặc điểm mở rộng

Những đặc điểm riêng khác phân biệt Swing với những thành phần AWT cũ

Swing có rất nhiều những thành phần mới như table, tree, slider, spinner, progress bar, internal frame và text.

Những thành phần Swing hỗ trợ việc thay thế các inset của chúng bằng một số lượng tùy ý các border lồng

bên trong.

Các thành phần Swing có các Tooltip đặt bên trên chúng. Bạn có thể tùy chọn các sự kiện bàn phím cho các

thành phần, định nghĩa chúng hoạt động như thế nào với những phím nóng đã cho.

- Ngoài ra còn có hỗ trợ debug cho việc hiển thị những thành phần Swing

4.Các gói và các lớp Swing

Dưới đây là những mô tả ngắn về các gói trong thư viện Swing

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 một 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.

2.javax.swing

Chứa các thành phần cốt lõi của Swing, bao gốm hầu hết các mô hình giao tiếp và các lớp hỗ trợ

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 muố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ớpmới.

4.javax.swing.colorchooser

Hỗ trợ cho thành phần JColorChooser

5.javax.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 tiếp thông tin

với các class.

6.javax.swing.filechooser

Hỗ trợ cho thành phần JFileChooser

7.javax.swing.plaf

Định nghĩa những yếu tố duy nhất tạo nên L&F 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

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.

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.

Page 9: Swing là gì

10.javax.swing.text.html

Sử dụng kỹ thuật đọc và định dang văn bản HTML

11.javax.swing.text.html.parser

Hỗ trợ việc phân tích HTML

12.javax.swing.text.rtf

Sử dụng kỹ thuật đọc và định dạng Rich Text Format

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ãy các thuộc tính.

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.

JFC (Java Foundation Class)

o Is a thư viện set trình interface đồ Hòa Phát triển based trên thư viện AWT

o JFC cung cấp kha năng tạo interface linh động, uyển convert hơn với AWT

o JFC có available trong các phiên bản từ JDK 1.2 become đi.

o The class of JFC package in javax.swing

Swing

Package is one is trong thư viện JFC, gồm nhiều class (lớp) và interface (giao diện) supports trợ mạnh tôi cho

the settings trình interface họa trên đồ JDK. Swing be description as a file of to phần đồ họa is tạo ra to the

cảm quan ( Hãy nhìn và cảm nhận) is thể hiện vào thời point thời gian chạy .

The thành phần Swing

The thành phần GUI của Swing thường bắt đầubởi chữ J

- JButton: Nút press

- JLabel: Nhãn

- JTextArea: Area văn bản

- JFrame: Window

- JPanel: Khung contain

- JCheckbox: Ô check

- JRadioButton: Ô check (chỉ một trong lựa chọn)

- JList: Hộp danh sách

- JComboBox: Danh sách xo

- JScrollPane: Thanh scroll

- ...

Việc xử lý sự kiện trên of thành phần Swing same như trên of thành phần AWT. This is the one for example

về JFrame đơn giản

Code:

Page 10: Swing là gì

nhập khẩu javax.swing.JFrame; 

nhập khẩu java.awt .*; 

lớp Thực hiện mở rộng JFrame 

container chứa = getContentPane (), 

công Thực hiện (String title) 

super (title); 

Label label = new Label ("Xin chào Tất cả mọi người, có chứa nhãn bối cảnh ");  

container.add (nhãn); 

public static void main (String a []) 

Thực hiện exe = new

Như bạn thấy, thật sự không có gì quá phuc file. If you Thanh Thảo AWT, the move qua SWING hoàn toàn

đơn giản với bạn.

Dưới đây là mã của tính mà them ta đã làm not move qua Swing.

Code:

import java.awt .*; 

nhập khẩu java Applet .*; 

nhập khẩu javax.swing .*, 

nhập khẩu java.awt.event .*; 

public class Calc7Swing mở rộng JApplet thực hiện ActionListener 

/ / -------- ------------------------------------------------- 

/ / Attributes: 

/ / hiển thị tổng số TextArea chạy tổng cộng tính toán 

/ / Label đầu ra cho thấy số lượng hiện tại được nhập vào 

/ / tăng gấp đôi memVal và curVal được sử dụng để tính toán 

/ / ----------------- ---------------------------------------- 

/ / TextArea tổng = new TextArea ("" , 5, 25, TextArea.SCROLLBARS_VERTICAL_ONLY); 

JTextArea tổng số container = new JTextArea (5, 25); 

JLabel output = new JLabel (""); c = getContentPane (); đôi memVal = 0; đôi curVal = 0; char tempVal ;tăng gấp đôi kết quả =

0; //------------------------------ / / actionPerformed - //--- --------------------------- công void actionPerformed (ActionEvent e) { string arg =

e.getActionCommand (); char c = arg.charAt (0); String s = output.getText ();

Page 11: Swing là gì

/ / Giá trị hiện tại của đầu ra 

/ / "" chìa khóa đặc biệt hoạt động trên giá trị hiện tại 

(arg.equals ("Backspace")) backspace (s), 

nếu người nào khác (arg.equals ("C")) clearAll (), 

nếu người nào khác (arg.equals (CE ")) clearEntry (), 

nếu người nào khác (arg.equals (sqrt ")) setCurVal (Math.sqrt (curVal)); 

khác (arg.equals (1 / x ")) setCurVal (1.0/curVal), 

nếu người nào khác (arg.equals ("+/-")) Phím chữ số luôn luôn được bổ sung vào giá trị hiện tại (c> = '0 '& & c

<= '9') setCurVal (s + c) ;

/ / Điểm thập phân gia tăng nếu không đã có trong đầu 

ra khác nếu (c == '.' 

{if (s.indexOf (c) <0) setCurVal (s + c) 

} khác nếu (c == '= ' ) 

{ switch (tempVal) { trường hợp '/': kết quả = memVal / curVal; break; trường hợp '*': kết quả = memVal

curVal; break; trường hợp '-': kết quả = memVal-curVal; break ; trường hợp '+ ' kết quả = memVal + curVal;

break ; trường hợp '%': kết quả =% memVal curVal; break ; } chuỗi memstr = "" + kết quả + " =

0; output.setText ("");

Page 12: Swing là gì

/ / Xử lý tất cả các phím điều hành 

else 

switch (c) 

trường hợp '/': memVal = curVal; tempVal = '/'; break; 

trường hợp '*': memVal = curVal; tempVal = '*'; break; 

trường hợp '-': memVal = curVal tempVal = '-'; break; 

trường hợp '+': memVal = curVal; tempVal = '+'; break; 

trường hợp '%': memVal = curVal; tempVal = '%' phá vỡ ; 

}

/ / Hiển thị kết quả trên TextArea có 

tên là chuỗi tổng memstr = "" + curVal + "" + c + "\ n 

"; total.append (padText (memstr, 

memstr.length ())); / / Clear 

sản lượng curVal = 0; 

output.setText ("");

//----------------------------------------------- ------------------------------------- 

}

//-----------------------------

/ / ------------------------------------------------ --------- 

/ / Phương thức init () thiết lập cách bố trí và màu sắc. 

/ / Sau đó nó gọi makeButtons () để bố trí thực tế 

/ / máy tính

/ / ------- -------------------------------------------------- 

public void init () 

Page 13: Swing là gì

setLayout (new BorderLayout (5,5)); 

setBackground (Color.lightGray); 

c.setLayout (new BorderLayout (5,5)); 

c.add (makeButtons ()); 

/ / c. add (getContentPane ()); 

/ / add ("Center", makeButtons ());

}

/ / ------------------------------------------------ ---------- 

/ / Đây là những phương pháp hữu ích 

/ / -------------------------------- --------------------------

padText tư nhân String (String s, int size) 

String temp = "" + s; 

trở lại temp.substring (temp.length () - kích thước); 

/ / Xử lý 

backspace trống backspace chính tư nhân (String s 

{if ( s.length ()> 0) 

= s.substring (0, s.length () -1); 

setCurVal (s); 

/ / Xử lý 'C' [Xóa tất cả] 

clearAll khóa riêng void () 

total.setText (""); 

output.setText (""); 

curVal = memVal = 0; 

/ / Xử lý CE '[rõ ràng nhập chính 

clearEntry private void () 

output.setText (""); 

curVal = 0; 

/ / Thiết lập giá trị hiện tại, bằng cách sử 

dụng một String setCurVal void tư nhân ( 

String s) {

Page 14: Swing là gì

output.setText (s), 

thử { 

curVal = (đôi (s)) doubleValue (); 

} catch (NumberFormatException ex) 

/ / Thiết lập giá trị hiện tại, bằng cách 

sử dụng một số setCurVal void tư nhân (tăng 

gấp đôi newValue) { 

curVal = newValue; 

output.setText ("" + newValue); 

/ / --------------------------------- ------------------------ 

/ / Điều này đưa ra sự xuất hiện của applet, bằng 

cách sử dụng / 

/ BorderLayout GridLayout / / Những màu sắc được sử dụng cho các nút có thể , hoặc có thể không xuất hiện 

/ / sao chép của bạn, tùy thuộc vào trình duyệt

Web của bạn / / ------------------------------- --------------------------

tin makeButtons JPanel () 

/ / đầu ra = new Label (); 

/ / tổng = new TextArea (); 

/ / Tạo 4 Panels [p1 qua p4] 

JPanel p = new JPanel (new BorderLayout (5,5)); 

JPanel p1 = new JPanel (new BorderLayout (5,5)); 

JPanel p2 = new JPanel (new BorderLayout (5,5)); 

JPanel p3 = new JPanel (new GridLayout (1,3,5,5)); 

JPanel p4 = new JPanel (new GridLayout (4,5,5,5)); 

JPanel p5 = new JPanel (new BorderLayout (5,5)); 

JButton backspaceBtn = new JButton ("Backspace"); 

JButton ceBtn = new JButton (" CE "); 

JButton cBtn = new JButton ("C"); 

JButton n7Btn = new JButton ("7"); 

JButton n8Btn = new JButton ("8"); 

JButton n9Btn = new JButton ("9"); 

JButton dBtn = new JButton ("/"); 

JButton sqrtBtn = new JButton ("sqrt"); 

JButton n4Btn = new JButton ("4"); 

JButton n5Btn = new JButton ("5"); 

JButton n6Btn = new JButton ("6 "); 

Page 15: Swing là gì

JButton mBtn = new JButton ("*"); 

JButton modBtn = new JButton ("%"); 

JButton n1Btn = new JButton ("1"); 

JButton n2Btn = new JButton ("2"); 

JButton n3Btn = new JButton ("3"); 

JButton miBtn = new JButton ("-"); 

JButton dxBtn = new JButton ("1 / x"); 

JButton bn0Btn = new JButton ("0"); 

JButton rBtn = new JButton (" +/-"); 

JButton pBtn = new JButton ("."); 

JButton plBtn = new JButton ("+"); 

JButton eBtn = new JButton ("=");

backspaceBtn.addActionListener(this);

ceBtn.addActionListener(this);

cBtn.addActionListener(this);

n7Btn.addActionListener(this);

n8Btn.addActionListener(this);

n9Btn.addActionListener(this);

dBtn.addActionListener(this);

sqrtBtn.addActionListener(this);

n4Btn.addActionListener(this);

n5Btn.addActionListener(this);

n6Btn.addActionListener(this);

mBtn.addActionListener(this);

modBtn.addActionListener(this);

n1Btn.addActionListener(this);

n2Btn.addActionListener(this);

n3Btn.addActionListener(this);

miBtn.addActionListener(this);

dxBtn.addActionListener(this);

bn0Btn.addActionListener(this);

rBtn.addActionListener(this);

pBtn.addActionListener(this);

plBtn.addActionListener(this);

eBtn.addActionListener(this);

// Add Backspace, CE, and C buttons to p3

p3.setForeground(new Color(232,0,0));

p3.setFont(new Font("Dialog", Font.PLAIN, 12));

p3.add(backspaceBtn);

p3.add(ceBtn);

p3.add(cBtn);

Page 16: Swing là gì

// Add Number buttons to p4

p4.setForeground(new Color(0, 0, 235));

p4.setFont(new Font("Dialog", Font.PLAIN, 14));

p4.add(n7Btn);

p4.add(n8Btn);

p4.add(n9Btn);

p4.add(dBtn);

p4.add(sqrtBtn);

p4.add(n4Btn);

p4.add(n5Btn);

p4.add(n6Btn);

p4.add(mBtn);

p4.add(modBtn);

p4.add(n1Btn);

p4.add(n2Btn);

p4.add(n3Btn);

p4.add(miBtn);

p4.add(dxBtn);

p4.add(bn0Btn);

p4.add(rBtn);

p4.add(pBtn);

p4.add(plBtn);

p4.add(eBtn);

// Add and initialize output and total

// [Label and TextArea for output]

output.setBackground(Color.white);

output.setForeground(Color.black);

output.setFont(new Font("Courier", Font.BOLD, 18));

total.setBackground(new Color(255, 255, 128));

total.setForeground(Color.black);

total.setFont(new Font("Courier", Font.BOLD, 14));

JScrollPane scrollPane = new JScrollPane(total,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,

JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

p5.add("Center", scrollPane);

//p5.add("Center", total);

p5.add("South", output);

// Hook up the panels

p2.add("North", p3);

p2.add("Center", p4);

// Add some spacing around outside

p1.add("North", p5);

Page 17: Swing là gì

p1.add("Center", p2);

p.setFont(new Font("Helvetica", Font.PLAIN, 6));

p.add("North", new Label(" "));

p.add("East", new Label(" "));

p.add("West", new Label(" "));

p.add("South", new Label(" "));

p.add("Center", p1);

return p;

}

}

Đây là một ví dụ khác.

Code:

import java.awt.*;

import javax.swing.*;

public class HelloJFC{

public static void main(String[] args){

JFrameframe = newJFrame("JFC");

Iconicon = newImageIcon("rose.gif");

JButtonbutton = newJButton("Rose", icon);

button.setMnemonic('R');

button.setToolTipText("Button Rose");

frame.getContentPane().setLayout(newFlowLayout());

frame.getContentPane().add(button);

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

frame.setSize(400, 300);frame.setVisible(true);

}

}

Code dưới đây chỉ có duy nhất một button, khi bạn click vào cửa sổ sẽ được đóng lại.

Code:

import javax.swing.JFrame;

import java.awt.*;

import java.awt.event.*;

class Core extends JFrame

{

Container container = getContentPane();

public Core(String title)

{

super(title);

Page 18: Swing là gì

Button button = new Button("My button");

EventQuit eventQuit=new EventQuit();

button.addActionListener(eventQuit);

container.add(button);

}

public static void main(String a[])

{

Core exe = new Core("Frame");

exe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

exe.pack();

exe.setVisible(true);

}

class EventQuit implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

System.exit(0);

}

}

}

Bài viết cùng chuyên mục

Các bước tạo ứng dụng với RMI    Các chủ đề liên quan:   

o [Java]Lập trình giao diện bằng Swing (Phần 3)

o RMI – Remote Method Invocation (p1)

o [Java] Thành phần JCheckBox – Swing

o [Java]Lập trình phân tán RMI (Phần 2)

o [Java]Lập trình Socket UDP (toàn tập)

Ở đây chúng ta có 1 ví dụ tạo ứng dụng máy chủ tính toán các phép tính cơ bản(+, -, *, /)

Ở phía server:

Tạo thư mục MyCalcServer, lưu các lớp sau vào đó

1> Tạo interface

Code:

import java.rmi.Remote;

import java.rmi.RemoteException;

Page 19: Swing là gì

public interface CalculatorInterface extends Remote {

long Add(long a,long b)throws RemoteException;

long Sub(long a,long b)throws RemoteException;

long Mul(long a,long b)throws RemoteException;

float Div(float a,float b)throws RemoteException;

}

2>Tạo lớp implements cài đặt các dịch vụ ở phía máy chủ:

Code:

import java.rmi.*;

import java.rmi.server.*;

public class CalculatorImpl extends UnicastRemoteObject implements CalculatorInterface {

private ServerUI ui;

public CalculatorImpl() throws RemoteException

{

}

public CalculatorImpl(ServerUI ui) throws RemoteException

{

this.ui=ui;

}

public long Add(long a, long b) throws RemoteException {

ui.addItem(“Call from client: “+a+”+”+b+”=”+(a+b));

return a+b;

}

public long Sub(long a, long b) throws RemoteException {

ui.addItem(“Call from client: “+a+”-”+b+”=”+(a-b));

return a-b;

}

public long Mul(long a, long b) throws RemoteException {

ui.addItem(“Call from client: “+a+”*”+b+”=”+(a*b));

return a*b;

}

public float Div(float a, float b) throws RemoteException {

if(Math.abs(b-0)<0.000001)

{

ui.addItem(“Call from client: Divide by zero”);

throw new ArithmeticException();

}

ui.addItem(“Call from client: “+a+”/”+b+”=”+(a/b));

return a/b;

}

}

Page 20: Swing là gì

3>Cài đặt server. Ở đây tôi thiết kế server dùng GUI

Code:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.rmi.*;

import javax.naming.Context;

import javax.naming.InitialContext;

public class ServerUI extends JFrame implements ActionListener{

private DefaultListModel dlm;

private JList lst;

private JLabel lblMessage;

private JButton btnStart,btnStop,btnExit;

private Context ctx=null;

public ServerUI(){

super(“Server RMI”);

lst=new JList(dlm=new DefaultListModel());

this.add(new JScrollPane(lst),BorderLayout.CENTER);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(300,300);

JPanel pB=new JPanel(new GridLayout(2,1));

JPanel pF=new JPanel();

pB.add(pF);

pF.add(btnStart=new JButton(“Start”));

pF.add(btnStop=new JButton(“Stop”));btnStop.setEnabled(false);

pF.add(btnExit=new JButton(“Exit”));

pB.add(lblMessage=new JLabel());

btnStart.addActionListener(this);

btnStop.addActionListener(this);

btnExit.addActionListener(this);

this.add(pB,BorderLayout.SOUTH);

}

public void DislplayInfos(String msg){

lblMessage.setText(msg);

}

public void addItem(String item){

dlm.addElement(item);

}

public static void main(String[]args){

try{

ServerUI ui=new ServerUI();

Page 21: Swing là gì

java.rmi.registry.LocateRegistry.createRegistry(1099);

ui.DislplayInfos(“server is stop…”);

ui.setVisible(true);

}catch(Exception x){

x.printStackTrace();

}

}

public void actionPerformed(ActionEvent e){

Object o=e.getSource();

if(o.equals(btnStart)){

new Thread(new Runnable(){

public void run(){

try {

CalculatorInterface calc=null;

calc=new CalculatorImpl(ServerUI.this);

ctx =new InitialContext();

ctx.rebind(“rmi:calc”, calc);

lblMessage.setText(“Calculator server is running…”);

}

catch (Exception ex) {

ex.printStackTrace();

}

}

}).start();

btnStop.setEnabled(true);

btnStart.setEnabled(false);

}

else if(o.equals(btnStop)){

try {

ctx.unbind(“rmi:calc”);

ctx=null;

btnStop.setEnabled(false);

btnStart.setEnabled(true);

lblMessage.setText(“Calculator server is stopped…”);

}

catch (Exception ex) {

ex.printStackTrace();

}

}

else if(o.equals(btnExit)){

System.exit(1);

Page 22: Swing là gì

}

}

}

4>Biên dịch:

Trong command promt, gõ dòng lệnh sau để biên dịch (thư mục hiện hành là MyCalcServer)

javac *.java

5> Thực thi:

Tạo file MyCalSVR.bat với nội dung sau

java ServerUI

//=========================================================

//=========================================================

//=========================================================

Ở phía client

Tạo thư mục MyCalcClient. Các lớp sau được lưu trong đó

1> Copy tâp tin CalculatorInterface.class vào thư mục này.

2>Tạo client như sau, ở đây chúng ta dùng GUI để thiết kế

Code:

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

import java.rmi.*;

public class ClientUI extends JFrame implements ActionListener

{

private JTextField txtA,txtB,txtKQ;

private JButton btnClear,btnExit;

private JButton btnCalcAdd,btnCalcSub,btnCalcMul,btnCalcDev;

public ClientUI(){

JPanel pCen=new JPanel(new GridLayout(4,1));

JPanel p1=new JPanel();JPanel p2=new JPanel();

JPanel p3=new JPanel();JPanel p4=new JPanel();

pCen.add(p1);pCen.add(p2);pCen.add(p3);pCen.add(p4);

getContentPane().add(pCen);

//==========================================

p1.add(new JLabel(“Nhap so a”));p1.add(txtA=new JTextField(15));

p2.add(new JLabel(“Nhap so b”));p2.add(txtB=new JTextField(15));

p3.add(new JLabel(“Ket qua :”));p3.add(txtKQ=new JTextField(15));

txtKQ.setEditable(false);

p4.add(btnCalcAdd=new JButton(” + “));btnCalcAdd.addActionListener(this);

Page 23: Swing là gì

p4.add(btnCalcSub=new JButton(” – “));btnCalcSub.addActionListener(this);

p4.add(btnCalcMul=new JButton(” * “));btnCalcMul.addActionListener(this);

p4.add(btnCalcDev=new JButton(” / “));btnCalcDev.addActionListener(this);

p4.add(btnClear=new JButton(“Clear”));btnClear.addActionListener(this);

p4.add(btnExit=new JButton(“Exit”));btnExit.addActionListener(this);

setResizable(false);

setSize(350,200);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setLocation(300,200);

}

public void actionPerformed(ActionEvent e) {

Object o=e.getSource();

if(o.equals(btnExit)){

System.exit(1);

}

else

{

if(txtA.getText().trim().equals(“”)||txtB.getText().trim().equals(“”)){

JOptionPane.showMessageDialog(null,”Text Fields cannot be null”,

“Error”,JOptionPane.ERROR_MESSAGE);

return;

}

if(o.equals(btnCalcAdd)){

try {

CalculatorInterface obj=null;

obj=(CalculatorInterface)Naming.lookup(“//localhost/calc”);

int a=Integer.parseInt(txtA.getText());

int b=Integer.parseInt(txtB.getText());

long x=obj.Add(a,b);

txtKQ.setText(“”+x);

}catch (Exception ex) {

ex.printStackTrace();

}

}

else if(o.equals(btnCalcSub)){

try {

CalculatorInterface obj=null;

obj=(CalculatorInterface)Naming.lookup(“//localhost/calc”);

int a=Integer.parseInt(txtA.getText());

int b=Integer.parseInt(txtB.getText());

long x=obj.Sub(a,b);

Page 24: Swing là gì

txtKQ.setText(“”+x);

}catch (Exception ex) {

ex.printStackTrace();

}

}

else if(o.equals(btnCalcMul)){

try {

CalculatorInterface obj=null;

obj=(CalculatorInterface)Naming.lookup(“//localhost/calc”);

int a=Integer.parseInt(txtA.getText());

int b=Integer.parseInt(txtB.getText());

long x=obj.Mul(a,b);

txtKQ.setText(“”+x);

}catch (Exception ex) {

ex.printStackTrace();

}

}

else if(o.equals(btnCalcDev)){

try {

CalculatorInterface obj=null;

obj=(CalculatorInterface)Naming.lookup(“//localhost/calc”);

int a=Integer.parseInt(txtA.getText());

int b=Integer.parseInt(txtB.getText());

double x=obj.Div(a,b);

txtKQ.setText(“”+x);

}catch (ArithmeticException aex) {

txtKQ.setText(“Divide by zero”);

}catch (Exception ex) {

ex.printStackTrace();

}

}

else if(o.equals(btnClear)){

txtA.setText(“”);

txtB.setText(“”);

txtKQ.setText(“”);

}

}

}

public static void main(String[]args){

System.setProperty(“java.security.policy”, “client.policy”);

ClientUI cc=new ClientUI();

Page 25: Swing là gì

cc.setVisible(true);

}

}

3> Tạo File Policy tên client.policy với nội dung sau

Code:

grant {

permission java.net.SocketPermission “*:1024-65535″, “connect”;

};

4> Biên dịch với command promt (thư mục hiện hành là MyCalcClient)

javac *.java

5> Tạo file thực thi có tên MyCalclient.bat với nội dung sau

java ClientUI

//=========================================================

//=========================================================

//=========================================================

Demo ứng dụng:

1> Chạy file MyCalSVR.bat để chạy server. Nhấn nút Start để start server

2> Chạy file MyCalclient.bat để chạy client.

Page 26: Swing là gì

3> Test chương trình

Chúc các bạn thành công!

[Java] Thành phần JCheckBox – Swing    Các chủ đề liên quan:   

o Demo Đọc và Ghi File bằng Java nhập liệu từ bàn phím

o [Java]Lập trình giao diện bằng Swing (Phần 3)

o [JAVA]Lập trình java Swing (Phần 2)

o Các bước tạo ứng dụng với RMI

o [Java]Tìm hiểu I/O Stream trong Java

Constructor 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, boolean selected)

Một số phương thức dùng với JCheckBox:

* public boolean isSelected(): trả về true nếu button được chọn, ngược lại thì false

* public void setSelected(boolean b): thiết lập trạng thái của button (nếu b là true: button được chọn, ngược

lại nếu b là false).

* public String getText()

* public void setText(String text)

* public Icon getIcon()

* public void setIcon(Icon icon)

Code:

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JCheckBox;

import javax.swing.JButton;

Page 27: Swing là gì

import java.awt.GridLayout;

import java.awt.BorderLayout;

import java.awt.Component;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

public class JCheckBoxDemo extends JFrame implements ActionListener

{

JPanel panel;

JButton buy;

float price[] = new float[]{785,580,1300,1695,900};

public JCheckBoxDemo() { super("JCheckBox Demo");

buy=new JButton("Generate bill");

panel = new JPanel(new GridLayout(5,1,10,10));

panel.add(new JCheckBox("1 - ACER Aspire 4710"));

panel.add(new JCheckBox("2 - LENOVO G410"));

panel.add(new JCheckBox("3 - HP Compaq V3615TU"));

panel.add(new JCheckBox("4 - SONY VAIO SZ340P7"));

panel.add(new JCheckBox("5 - HP Compaq 6520s"));

getContentPane().setLayout(new BorderLayout());

getContentPane().add(new JLabel("List of product:"),BorderLayout.NORTH);

getContentPane().add(panel,BorderLayout.EAST);

getContentPane().add(buy,BorderLayout.SOUTH);

buy.addActionListener(this);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setSize(300,300);

setVisible(true);

}

public void actionPerformed(ActionEvent ae) {

Component [] com = panel.getComponents();

float total=0;

System.out.println("---------------------------------------------");

for (int i=0;i<com.length;i++) {

JCheckBox ch=(JCheckBox)com[i];

if (ch.isSelected()) {

System.out.println(ch.getText()+"\t\t"+price[i]+" (USD)");

total=total+price[i];

}

}

Page 28: Swing là gì

System.out.println("---------------------------------------------");

System.out.println("Total price:\t"+total+" (USD)");

}

public static void main(String args[]) {

new JCheckBoxDemo();

}

}

Đoạn code trên tạo ra 1 ứng dụng đơn giản mà nó hiển thị ra danh sách những sản phẩm và giá tương ứng với sự lựa chọn từ phía người

dùng.