Thứ Ba, 18 tháng 6, 2013

JAVA VÀ LẬP TRÌNH GIAO DIỆN BẰNG SWING

Các bài trước mình đã giới thiệu về Java cơ bản rồi. Hôm nay mình sẽ nói về Thiết kế và lập trình với giao diện trong Java nha.

Bài 1 - Mở đầu về Swing
Chương trình này sẽ tạo một JFrame đơn giản nhất


Code:

import javax.swing.JFrame;
class HelloWorldSwing
{
public static void main(String[] a)
{
JFrame frame=new JFrame("Main Frame");//Main Frame la ten cai cua so
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//ham dong cua so lai
JLabel label=new JLabel("Hello Everybody, label contain context");//mot doi tuong do hoa
frame.getContentPane().add(label);//dua doi tuong do hoa vao trong frame
frame.pack();//"dong goi" lai toan bo trinh do hoa
frame.setVisible(true);//hien thi trinh do hoa ra man hinh
}
}


Đây là một Frame đơn giản khác, nhưng có thể dùng dễ dàng cho việc mở rộng chương trình

Code:

import javax.swing.JFrame;
import java.awt.*;
class Execute extends JFrame
{
Container container = getContentPane();
public Execute(String title)
{
super(title); //tuong duong JFrame(title)
Label label=new Label("Hello Everybody, label contain context");
container.add(label);
}
public static void main(String a[])
{
Execute exe = new Execute("Frame");
exe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
exe.pack();
exe.setVisible(true);
}
}


Hỗ trợ tiếng Việt
Giả sử bạn muốn nút bấm của bạn có dòng "Việt Nam" và bạn không biết in như thế nào, chương trình sau sẽ giúp bạn
JButton b=new JButton("Vi\u1EC7t Nam");
\u1EC7 là mã Unicode của kí tự ệ mà Java hỗ trợ. Tất cả kí tự Việt đều được hỗ trợ trong Latin và Latin Extend
Lưu ý là chỉ có javax.swing mới hỗ trợ, java.awt không hỗ trợ
Bài 2 - Cài đặt bộ nghe và sự kiện cho các đối tượng đồ họa
Các đối tượng đồ họa sở dĩ có thể hoạt động được là nhờ có các bộ nghe "nghe" các hành động mà người dùng tương tác với chuột hay bàn phím, và từ đó cho ra các sự kiện tương ứng.
Trong ví dụ dưới đây ta có class EventQuit là một bộ nghe, bộ nghe này thực hiện phương thức actionPerformed chính là chứa những sự kiện của bộ nghe đó. Đối tượng eventQuit là một instance của class EventQuit. Để cài đặt bộ nghe này cho đối tượng đồ họa button ta dùng phương thức addActionListener.

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ây giờ, nếu ta muốn rút gọn, cài đặt bộ nghe và hành động trực tiếp, ta làm như sau

Code:

import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
class Core
{
public static void main(String args[])
{
JFrame frame = new JFrame("My frame");
final JButton button = new JButton("My button");
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button) System.exit(0); //nếu event này có source do button sinh ra
}
});
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}



Bài 3 - setLayout(null) đi đôi với setBounds
setLayout mạnh nhất trong Swing là setLayout(null) cho đối tượng add, còn đối với đối tượng bị add thì setBounds, cú pháp setBounds(x,y,width,height)
Trên monitor, Java tính điểm có tọa độ (0,0) là điểm trái trên cùng. Sau đó trục hoành (x) là chiều ngang monitor từ trái sang phải và trục tung (y) là chiều dọc monitor từ trên xuống dưới
Phương thức này sẽ tạo ra một hình chữ nhật ảo bao quanh đối tượng bị add, hình chữ nhật này có tọa độ góc đầu tiên là (x,y) và dài width cao height. Ví dụ như bài sau:

Code:

import javax.swing.JFrame;
import java.awt.*;
class Core
{
public static void main(String args[])
{
JFrame frame = new JFrame("My frame");
frame.setLayout(null);
JButton b1 = new JButton("Button 1");
b1.setBounds(0,0,100,25);
frame.add(b1);
JButton b2 = new JButton("Button 2");
b2.setBounds(100,0,100,25);
frame.add(b2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}


Như vậy là chúng ta đã setLayout(null) cho frame và lần lượt setBounds (kích thước cũng như vị trí) cho 2 button. Vậy để set kích thước cũng như vị trí cho chính frame thì dùng 2 phương thức sau:

Code:

import javax.swing.JFrame;
import java.awt.*;
class Core
{
public static void main(String args[])
{
JFrame frame = new JFrame("My frame");
frame.setLayout(null);
JButton b1 = new JButton("Button 1");
b1.setBounds(0,0,100,25);
frame.add(b1);
JButton b2 = new JButton("Button 2");
b2.setBounds(100,0,100,25);
frame.add(b2);
frame.setLocation(200,100);
frame.setSize(200,60);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}


Bài này y chang bài trên, có khác là giờ đây vị trí điểm đầu của frame đã được xác định bằng setLocation, Nếu không setLocation, mặc định là (0,0) còn kích thước được xác định bằng setSize. Lưu ý là 200=chiều dài 2 cái button cộng lại còn 60=chiều rộng button + chiều rộng thanh ban đầu (=35).
Bài 4 - setLayout không phụ thuộc phân giải màn hình

Với các ứng dụng nhỏ thì chưa cần quan tâm lắm. Với các ứng dụng trung bình và lớn thì ứng dụng "co giãn" tùy theo độ phân giải sẽ là lợi thế lớn. Ta có thể lấy độ phân giải hiện hành và tùy biến ứng dụng như sau:

Code:

import javax.swing.JFrame;
import java.awt.*;
public class Core
{
public static void main(String[] args)
{
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
JFrame frame = new JFrame("My frame");
frame.setSize(screenWidth,screenHeight);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}


Để người dùng không thay đổi được size của mình, dùng frame.setResizable(false)
Bài 5 - Các đối tượng đồ họa cơ bản của Java
* Button
Button button=new Button("OK");
add(button);
hoặc add(new Button("OK"));
Button sử dụng ActionListener để nghe sự kiện và truyền hành động
* Label
Label label=new Label("The sum of values here:");
Label là nhãn
* Panel
Panel panel=new Panel();
Panel là khung chứa.

0 nhận xét:

Đăng nhận xét