swing là gì
TRANSCRIPT
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
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.
- 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.
– 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
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;
}
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
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.
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.
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:
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 ();
/ / 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 ("");
}
/ / 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 ()
{
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) {
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 ");
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);
// 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);
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);
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;
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;
}
}
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();
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);
}
}
}
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);
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);
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();
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.
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;
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];
}
}
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.