Header ads

Header ads
» » » Làm sao để tạo giao diện linh hoạt và tái sử dụng được trong Swing

Khi phát triển phần mềm trên Swing nhiều lập trình viên gặp khó khăn trong việc thay đổi diện và tái sử dụng giao diện bởi họ đã thiết kế ngay trên JFrame. Có một cách khác là chúng ta sẽ thiết kế từng giao diện trên các JPanel. Sau đó sẽ dùng phương thức setContentPane() của JFrame để thay đổi nội dung của JFrame chính.
Sau đây ta sẽ xem một ví dụ trên Netbeans về phát triển một ứng dụng: Ứng dụng có giao diện đầu tiên là đăng nhập (login). Sau đó nếu đăng nhập thành công thì sẽ chuyển sang giao diện chính (home)
1. Tạo một java application
Create Java Application
Create Java Application
2. Tạo một JFrame (Main) và 2 JPanel (PnLogin , PnHome)
Các thành phần của ứng dụng
Các thành phần của ứng dụng
3. PnLogin
  • Thiế kế giao diện cho PnLogin
Giao điẹn của PnLogin
Giao điẹn của PnLogin
  • Ở giao diện này khi người dùng đăng nhập đúng thì sẽ chuyển sang giao diện Home, bởi thế panel này cần có thuộc tính JPanel cần chuyển tới.
  
//panel sẽ được hiển thị khi login thành công
private JPanel pnLoginSuccess;

/**
 * Xác định panel sẽ hiển thị khi đăng nhập thành công
 * @param pnLoginSuccess
 */
public void setPnLoginSuccess(JPanel pnLoginSuccess) {
 this.pnLoginSuccess = pnLoginSuccess;
}
  • Code cho sự kiện click chuột vào nút Login:
Click chuột phải vào nút Login và chọn Events ==> Action ==> actionPerformed
JFrame parent = Utitilities.findJFrameOf(this);
if (parent != null) {
 parent.setContentPane(pnLoginSuccess);
 parent.pack();
} else {
 JOptionPane.showMessageDialog(parent, 
             "Panel Login only used for JFrame");
 System.exit(1);
}
Phương thức Utitilities.findJFrameOf(this) là để tìm JFrame chứa một component
package tap.chi.lap.trinh;

import java.awt.Component;
import java.awt.Container;
import javax.swing.JFrame;

/**
 *
 * @author cibervn
 */
public class Utitilities {

    /**
     *
     * @param component
     * @return top level container JFrame 
     *that contains component
     */
    public static JFrame findJFrameOf(Component component) {
        Container c = component.getParent();
        while (c.getParent() != null) {
            c = c.getParent();
        }
        if (c instanceof JFrame) {
            return (JFrame) c;
        }
        return null;
    }
}
4. Main
JFrame này chứa các panel có thể có, và cần phải xác định navigation giữa các giao điện
 private PnLogin pnLogin;
    private PnHome pnHome;

    /**
     * Creates new form Main
     */
    public Main() {
        //
        initComponents();

        //Khởi tạo các Panel của ứng dụng
        initPanels();

        //Xây dựng giao diện ban đầu cho ứng dụng
        setContentPane(pnLogin);
        pack();
    }

    private void initPanels() {
        pnLogin = new PnLogin();
        pnHome = new PnHome();

        //Xác định navigation
        //Sau khi đăng nhập thành công sẽ 
        //chuyển sang giao diện của PnHome
        pnLogin.setPnLoginSuccess(pnHome);

    }
5. Tương tự như PnLogin ta xây dựng giao diện cho các panel khác.
Source code

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn