Thứ Hai, 25 tháng 3, 2013

Hướng dẫn sử dụng JSlider và Timer trong Java

Bạn cần thực thi một phương thức trong một tiểu trình riêng theo chu kỳ hay ở một thời điểm xác định. Khi đó, bạn cần khai báo một phương thức trả về void và chỉ nhận một đối tượng làm đối số. Sau đó, tạo một thể hiện ủy nhiệm System.Threading.TimerCallback...

Bạn cần thực thi một phương thức trong một tiểu trình riêng theo chu kỳ hay ở một thời điểm xác định. Khi đó, bạn cần khai báo một phương thức trả về void và chỉ nhận một đối tượng làm đối số. Sau đó, tạo một thể hiện ủy nhiệm  System.Threading.TimerCallbacktham chiếu đến phương  thức  này.  Tiếp  theo,  tạo  một  đối  tượng System.Threading.Timer và truyền  nó  cho  thể  hiện  ủy  nhiệm  TimerCallback cùng  với  một  đối  tượng  trạng thái mà Timer sẽ truyền cho phương thức của bạn khi Timer hết hiệu lực. Bộ thực thi sẽ chờ cho đến khi Timer hết hiệu lực và sau đó gọi phương thức của bạn bằng một tiểu trình trong thread pool.

Thông  thường,  rất  hữu  ích  khi  thực  thi  một  phương  thức  ở  một  thời  điểm  xác  định  hay  ở những thời khoảng xác định. Ví dụ, bạn cần sao lưu dữ liệu lúc 1:00 AM mỗi ngày hay xóa vùng đệm dữ liệu mỗi 20 phút. Lớp  Timer giúp việc định thời thực thi một phương thức trở nên  dễ  dàng,  cho  phép  bạn  thực  thi  một  phương  thức  được  tham  chiếu  bởi  ủy  nhiệm TimerCallback ở  những  thời  khoảng  nhất  định.  Phương  thức  được  tham  chiếu  sẽ  thực  thi trong ngữ cảnh của một tiểu trình trong thread pool.

Khi tạo một đối tượng Timer, bạn cần chỉ định hai thời khoảng (thời khoảng có thể được chỉ định là các giá trị kiểu int, long, uint, hay System.TimeSpan):

• Giá trị đầu tiên là thời gian trễ (tính bằng mili-giây) để phương thức của bạn được thực thi  lần đầu tiên.  Chỉ định  giá trị  0 để thực thi phương thức ngay lập tức, và chỉ địnhSystem.Threading.Timeout.Infinite  để   tạo   Timer  ở   trạng   thái   chưa   bắt   đầu (unstarted).

• Giá trị thứ hai là khoảng thời gian mà Timer sẽ lặp lại việc gọi phương thức của bạn sau lần thực thi đầu tiên. Nếu bạn chỉ định giá trị 0 hay Timeout.Infinite thì Timer chỉ thực thi  phương  thức một  lần duy  nhất (với  điều  kiện  thời  gian  trễ ban  đầu  không  phải  làTimeout.Infinite). Đối số thứ hai có thể cung cấp bằng các trị kiểu  int, long, uint, haySystem.TimeSpan.

Sau khi tạo đối tượng Timer, bạn cũng có thể thay đổi các thời khoảng được sử dụng bởiTimer bằng  phương  thức  Change, nhưng  bạn không thể thay đổi phương thức sẽ được gọi. Khi đã dùng xong Timer, bạn nên gọi phương thức Timer.Depose để giải phóng tài nguyên hệ thống bị chiếm giữ bởi Timer. Việc hủy Timer cũng hủy luôn phương thức đã được định thời thực thi.

Lớp TimerExample dưới đây trình bày cách sử dụng Timer để gọi một phương thức có tên là TimerHandler. Ban đầu, Timer được cấu hình để gọi TimerHandler sau hai giây và lặp lại sau một giây. Ví dụ này cũng trình bày cách sử dụng phương thức Timer.Change để thay đổi các thời khoảng.



  1. using System;  

  2. using System.Threading;  

  3. public class TimerExample {  

  4. // Phương thức sẽ được thực khi Timer hết hiệu lực.  

  5. // Hiển thị một thông báo ra cửa sổ Console.   

  6. private static void TimerHandler(object state) {  

  7. Console.WriteLine("{0} : {1}",  

  8. DateTime.Now.ToString("HH:mm:ss.ffff"), state);  

  9. }  

  10. public static void Main() {  

  11. // Tạo một thể hiện ủy nhiệm TimerCallback mới  

  12. // tham chiếu đến phương thức tĩnh TimerHandler.  

  13. // TimerHandler sẽ được gọi khi Timer hết hiệu lực.  

  14. TimerCallback handler = new TimerCallback(TimerHandler);  

  15. // Tạo một đối tượng trạng thái, đối tượng này sẽ được  

  16. // truyền cho phương thức TimerHandler.  

  17. // Trong trường hợp này, một thông báo sẽ được hiển thị.   

  18. string state = "Timer expired.";  

  19. Console.WriteLine("{0} : Creating Timer.", DateTime.Now.ToString("HH:mm:ss.ffff"));  

  20. // Tạo một Timer, phát sinh lần đầu tiên sau hai giây  

  21. // và sau đó là mỗi giây.  

  22. using (Timer timer = new Timer(handler, state, 2000, 1000)) {  

  23. int period;  

  24. // Đọc thời khoảng mới từ Console cho đến khi  

  25. // người dùng nhập 0. Các giá trị không hợp lệ  

  26. // sẽ sử dụng giá trị mặc định là 0 (dừng ví dụ). do {  

  27. try {  

  28. period = Int32.Parse(Console.ReadLine());  

  29. } catch {  

  30. period = 0;  

  31. }  

  32. // Thay đổi Timer với thời khoảng mới.  

  33. if (period > 0) timer.Change(0, period);  

  34. } while (period > 0);  

  35. }  

  36. // Nhấn Enter để kết thúc.  

  37. Console.WriteLine("Main method complete. Press Enter."); Console.ReadLine();  

  38. }  

  39. }  



Mặc dù Timer thường được sử dụng để gọi thực thi các phương thức ở những thời khoảng, nhưng nó cũng cung cấp cách thức để thực thi một phương thức ở một thời điểm xác định. Bạn cần phải tính toán khoảng thời gian từ thời điểm hiện tại đến thời điểm cần thực thi. Ví dụ dưới đây sẽ thực hiện điều này:



  1. public static void RunAt(DateTime execTime) {  

  2. // Tính khoảng thời gian từ thời điểm hiện tại  

  3. // đến thời điểm cần thực thi.  

  4. TimeSpan waitTime = execTime - DateTime.Now;  

  5. if (waitTime < new TimeSpan(0))   

  6. waitTime = new TimeSpan(0);  

  7. // Tạo một thể hiện ủy nhiệm TimerCallback mới  

  8. // tham chiếu đến phương thức tĩnh TimerHandler.  

  9. // TimerHandler sẽ được gọi khi Timer hết hiệu lực.   

  10. TimerCallback handler = new TimerCallback(TimerHandler);  

  11. // Tạo một Timer chỉ phát sinh một lần tại thời điểm  

  12. // được chỉ định. Chỉ định thời khoảng thứ hai là -1  

  13. // để ngăn Timer thực thi lặp lại phương thức.  

  14. new Timer(handler, null, waitTime, new TimeSpan(-1));  

  15. }  



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


Trong loạt bài này tôi cùng các bạn sẽ tìm hiểu những khái niệm về Swing của như 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

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

-- Gõ nội dung sự kiện cho statechange
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ờ Huy 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
Timer thoigian;
Integer second;
Integer mini; 


Khởi tạo và set đối tượng cho Timer trong hàm khởi tạo 
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
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
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
thoigian.stop();
mini=0;
second=0; 


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

0 nhận xét:

Đăng nhận xét