Monday, December 7, 2015

Xây dựng ứng dụng MDI với Java (netbean, ứng dụng form cha-con)

MDI application là loại giao diện ứng dụng rất phổ biến trên nền hệ điều hành window. Java hỗ trợ 02 đối tượng jDesktopPaneJInternalFrame cho phép lập trình viên tạo ra loại giao diện ứng dụng này đơn gian và nhanh chóng.

Trong bài này tôi hướng dẫn căn bản cho các bạn sinh viên (lập trình viên) từng bước tạo ứng dụng có kiểu giao diện này.
1. Tạo form chính (FrmMain)
2. Định nghĩa form con (Children form)
3. Chỉ đinh form cha-con.
4. Ràng buộc form con chỉ được mở 1 lần trong form cha.

Bước 1: Tạo ứng dụng Java destop với netbean.
+ File -> New Project -> chọn kiểu java application
Bước 2: Tạo đối tượng form cha
+ File -> New File -> chọn Swing GUI Forms -> chọn JFrame Form phía bên phải
+ Thiết kế menu chính của chương trình: Kéo thả Menu Bar và jDesktopPane vào form chính như hình dưới

[caption id="attachment_1086" align="aligncenter" width="300"]Giao diện tạo form chính Giao diện tạo form chính[/caption]

Bước 3: Xây dựng các form con, trong ví dụ này tôi tạo form Login
+ File -> New File chọn tiếp loại JInternalFrame

Các bạn thiết kế lại giao diện form con cho phù hợp

Bước 4: Gán form con và form cha
+ Chọn menu login trong form cha: Click chuột phải và chọn event => action performed
[sourcecode language="java"]
for (JInternalFrame frmChild : jDesktopPane1.getAllFrames()) {
frmChild.dispose();
}

FrmLogin frmLogin = new FrmLogin();
frmLogin.setTitle("Login to system");
frmLogin.setLocation(this.getWidth()/2 - frmLogin.getWidth()/2,(this.getHeight()-20)/2 - frmLogin.getHeight()/2 - 20);
jDesktopPane1.add(frmLogin);
frmLogin.setVisible(true);
[/sourcecode]

Dòng lệnh for đóng tất cả các form con đang mở.
[sourcecode language="java"]
jDesktopPane1.add(frmLogin);
frmLogin.setVisible(true);
[/sourcecode]
Đoạn gán form login vào form main.

OK, bây giờ chạy form cha và chọn menu login ta sẽ có kết quả

[caption id="attachment_1087" align="aligncenter" width="300"]Form con Form con[/caption]

Bước 5: Qui định form chỉ được mở 1 lần, nếu trước đó đã mở và hiện đang bị che khuất thì chỉ hiển thị form con lên trên (active). Trong ví dụ này tôi chọn form About để làm demo
+ Định nghĩa biên frmAbout có kiểu là FrmAbout
+ Trong sự kiện Action Performed của menu About ta cung cấp code như sau
[sourcecode language="java"]
private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(frmAbout == null || frmAbout.isClosed())
{
frmAbout = new FrmAbout();
jDesktopPane1.add(frmAbout);
frmAbout.setLocation(this.getWidth()/2 - frmAbout.getWidth()/2,(this.getHeight()-20)/2 - frmAbout.getHeight()/2 - 20);
frmAbout.setVisible(true);
}
else
{
frmAbout.setLocation(this.getWidth()/2 - frmAbout.getWidth()/2,(this.getHeight()-20)/2 - frmAbout.getHeight()/2 - 20);
frmAbout.setVisible(true);
}
}
[/sourcecode]

Như vậy là chúng ta vừa sủ dụng jDesktopPane và jInternalFrame để xây dựng ứng dụng MDI rất đơn gian. Hi vọng nó sẽ cho các bạn một các nhìn ban đầu về các xây dựng MDI application trên java với sự hỗ trợ của netbean.

Video từng bước tại đây

2 comments:

  1. bạn giải thích từng tên frm tương ứng với lớp nào được không? Mình đọc không hiểu lắm frm nào là JFrame, frm nào JInternalFrame v.v

    ReplyDelete
  2. Chỉ có form Main là Jframe thôi bạn à

    ReplyDelete

Translate