Trong topic này Tôi muốn hướng dẫn các bạn cách mở các cửa sổ windows khác trong Java .Tình huống: Bạn quan sát hình Tôi chụp bên dưới, từ 1 cửa sổ chính chứa 2 JButton, mỗi JButton sẽ có chức năng mở các cửa sổ khác nhau. Ở đây Tôi muốn hướng dẫn 2 tình huống đó là mở 1 JFrame và 1 JDialog khác để từ đó các bạn có thể tham khảo áp dụng cho các chương trình tương tự. Bạn phải biết được sự khác biết giữa JFrame và JDialog (mặc định Tôi cho là các bạn đã biết )
Trang 1
—————————————-Tôi cung cấp cho các bạn 3 class:
class MyMainUI sẽ chứa 2 JButton : Open MyUI1 và Open MyUI2
class MyUI1 kế thừa từ JFrame
class MyUI2 kế thừa từ JDialog
Trang 2public class MyMainUI extends JFrame{
private static final long serialVersionUID = 1L;
public MyMainUI(String title)
Trang 3JPanel pnBox=new JPanel();
JButton btn1=new JButton(“Open MyUI1”);JButton btn2=new JButton(“Open MyUI2”);pnBox.add(btn1);
pnBox.add(btn2);
btn1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {MyUI1 ui1=new MyUI1(“Hello Teo!”);
ui1.setVisible(true);
}
});
btn2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {MyUI2 ui2=new MyUI2(“Hello Teo!”);
Trang 4public static void main(String[] args) {
MyMainUI mainUI=new MyMainUI(“Demo OPen Another Windows”);
Trang 5import javax.swing.JTextField;
public class MyUI1 extends JFrame{
private static final long serialVersionUID = 1L;
public MyUI1(String title)
JPanel pn=new JPanel();
JButton btn1=new JButton(“Hello I’m JFrame”);JTextField txt1=new JTextField(15);
Trang 6public class MyUI2 extends JDialog{
private static final long serialVersionUID = 1L;
public MyUI2(String title)
Trang 7JPanel pn=new JPanel();
JButton btn1=new JButton(“Hi ! My name is JDialog”);JButton btn2=new JButton(“Click me!”);
JTextField txt1=new JTextField(15);
JLabel lbl1=new JLabel(“Hello! Hello!”);
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, “Click tui hả?”);
Trang 8– JFileChooser
Trang 9-Cho phép lưu đối tượng xuống ổ cứng và đọc đối tượng lên giao diện
Mô tả:
Cho phép nhập xuất danh sách các danh mục sản phẩm, các sản phẩm của từng danh mục, các chức năng thêm sửa xóa, lưu tập tin
Các em tham khảo và tiếp tục hoàn thiện những phần Thầy chưa làm.
Cũng như các ví dụ trước, Thầy không ghi chú, các em ráng đọc hiểu, vì cách sử dụng control Thầy đã hướng dẫn kỹ trên lớp
Cấu trúc file chương trình gồm có:
Product.java : dùng để lưu thông tin của từng sản phẩm
Category.java: dùng để lưu danh mục sản phẩm và lưu danh sách các sản phẩm của từng danh mục
ListCategory.java: dùng để lưu danh sách các danh mục
MyProcessFile.java: dùng để xử lý tập tin: lưu và đọc đối tượng trên ổ cứng
MainManagerUI.java: lớp giao diện chính của chương trình
CategoryManagerUI.java: lớp giao diện phụ để cập nhật thông tin của danh mục TestMain.java: dùng để chạy chương trình chính
Giao diện chính của chương trình như sau:
Trang 10Khi bấm vào nút New của danh mục sẽ hiển thị màn hình cập nhật danh mục:
Coding mẫu:
Product.java
importjava.io.Serializable;public class Product implements Serializable {
private static final long serialVersionUID = 1L;
private String productId;
private String productName;
Trang 11private String description;
private double unitPrice;
private int quantity;
public String getProductId() {
Trang 12public double getUnitPrice() {
Trang 13public class Category implements Serializable {
private static final long serialVersionUID = 1L;
private String cateId;
private String cateName;
private ArrayList<Product>listPro=new ArrayList<Product>();public String getCateId() {
Trang 15Product pFind=findProductById(p.getProductId());if(pFind!=null)
Trang 16public void removeProductByIndex(String index)
public class ListCategory implements Serializable {
private static final long serialVersionUID = 1L;
private ArrayList<Category>listCate=new ArrayList<Category>();public Category findCateById(String id)
{
Trang 17for(Category cate: listCate)
Trang 18public class MyProcessFile {
public static void saveData(Object list,String fileName){
try
{
FileOutputStream fOut=new FileOutputStream(fileName);ObjectOutputStream oOut=new ObjectOutputStream(fOut);oOut.writeObject(list);
}
catch(Exception ex)
Trang 21public class MainManagerUI extends JFrame {
private static final long serialVersionUID = 1L;
private static JList lstCate;
private JTable tblProduct;
private DefaultTableModel dtmProduct;
private JButton btnCateRemove,btnCateNew,btnCateUpdate,btnNew,btnSave,btnRemove;private JTextField txtId,txtName,txtUnitprice,txtQuantity;
private JTextArea txtDescription;
private static JComboBox cboCateList;
JMenuBar menubar;
JMenu mnuFile;
JMenuItem mnuFileOpenDataFromDisk,mnuFileWritetodisk,mnuFileExit;
Trang 22public static ListCategory listData;
public static Category selectedCate;
public MainManagerUI(String title)
mnuFileWritetodisk=new JMenuItem(“Write Data to disk”);
mnuFileOpenDataFromDisk=new JMenuItem(“Open Data from disk”);
Trang 23mnuFileExit =new JMenuItem(“Exit”);
menubar.add(mnuFile);
mnuFile.add(mnuFileWritetodisk);
mnuFile.add(mnuFileOpenDataFromDisk);mnuFile.addSeparator();
JPanel pnNorth=new JPanel();
JLabel lblTitle=new JLabel(“Quản lý sản phẩm”);
Font ftTitle=new Font(“arial”, Font.BOLD, 32);
Trang 24JPanel pnListProduct=new JPanel();
JSplitPane slitPane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, pnListCate,
JPanel pnListCateSouth=new JPanel();
btnCateNew =new JButton(“New”);
JPanel pnProductTitle=new JPanel();
JLabel lblProductTitle=new JLabel(“Thông tin chi tiết”);
Trang 25pnProductDetail.setLayout(new BoxLayout(pnProductDetail, BoxLayout.Y_AXIS ));
JPanel pnCateList=new JPanel();
JLabel lblCateId=new JLabel(“Category :”);
cboCateList=new JComboBox();
pnCateList.add(lblCateId);
Trang 26pnProductDetail.add(pnCateList);
JPanel pnProductId=new JPanel();
JLabel lblProId=new JLabel(“Product ID:”);
txtId=new JTextField(20);
pnProductId.add(lblProId);
pnProductId.add(txtId);
pnProductDetail.add(pnProductId);
JPanel pnProductName=new JPanel();
JLabel lblProName=new JLabel(“Product Name:”);txtName=new JTextField(20);
pnProductName.add(lblProName);
pnProductName.add(txtName);
pnProductDetail.add(pnProductName);
JPanel pnProductUnitPrice=new JPanel();
JLabel lblUnitPrice=new JLabel(“Unit Price:”);txtUnitprice=new JTextField(20);
Trang 27JLabel lblQuantity=new JLabel(“Quantity:”);
txtQuantity=new JTextField(20);
pnProductQuantity.add(lblQuantity);
pnProductQuantity.add(txtQuantity);
pnProductDetail.add(pnProductQuantity);
JPanel pnProductDescription=new JPanel();
JLabel lblDescription=new JLabel(“Description:”);txtDescription=new JTextArea(4, 20);
JScrollPane scare=new JScrollPane(txtDescription);pnProductDescription.add(lblDescription);
Trang 29cboCateList.removeAllItems();
Trang 30for(Category cate : listData.getList())
Trang 34public class CategoryManagerUI extends JFrame{
private static final long serialVersionUID = 1L;
private JTextField txtId,txtName;
private JButton btnOk;
public CategoryManagerUI(String title)
Trang 35JPanel pnBox=new JPanel();
pnBox.setLayout(new BoxLayout(pnBox, BoxLayout.Y_AXIS));
JPanel pnId=new JPanel();
txtId=new JTextField(15);
txtName=new JTextField(15);
JLabel lblId=new JLabel(“Cate Id:”);
JLabel lblName=new JLabel(“Cate Name:”);
Trang 36public void actionPerformed(ActionEvent arg0) {
Category cate=new Category(txtId.getText(), txtName.getText());
public class TestMain {
public static void main(String[] args) {
MainManagerUI uiProduct=new MainManagerUI(“Quản lý sản phẩm!”);
Trang 38Trong ví dụ này Tôi sẽ cung cấp 2 class.
Class 1 tên là PTB2UI dùng để thiết kế giao diện
class 2 tên là PTB2Engine dùng để giải phương trình bậc 2, có 3 thông số được truyền vào là a,b,c lấy từ giao diện
Ví dụ này có kiểm tra tính hợp lệ của dữ liệu nhập vào, các bạn xem các dòng lệnh try…catch
Tôi không có giải thích nhiều về code nữa, vì đã giải thích trong các bài giảng rồi, hi vọng các em cố gắng đọc hiểu Có rất nhiều cách làm!
Trang 39import javax.swing.border.*;
public class PTB2UI extends JFrame {
private static final long serialVersionUID = 1L;
public PTB2UI(String title)
Trang 40JLabel lblTitle=new JLabel(“Giải phương trình bậc 2”);pnNorth.add(lblTitle);
pnBorder.add(pnNorth,BorderLayout.NORTH);
lblTitle.setForeground(Color.BLUE);
Font ft=new Font(“arial”, Font.BOLD, 25);
lblTitle.setFont(ft);
JPanel pnSouth=new JPanel();
JButton btnGiai=new JButton(“Giải”);
JButton btnXoa=new JButton(“Xóa”);
JButton btnThoat=new JButton(“Thoát”);
Trang 41pnCenter.setLayout(new BoxLayout(pnCenter, BoxLayout.Y_AXIS)); pnBorder.add(pnCenter,BorderLayout.CENTER);
JPanel pna=new JPanel();
JLabel lbla=new JLabel(“nhập a:”);
final JTextField txta=new JTextField(15);
pna.add(lbla);
pna.add(txta);
pnCenter.add(pna);
JPanel pnb=new JPanel();
JLabel lblb=new JLabel(“nhập b:”);
final JTextField txtb=new JTextField(15);
pnb.add(lblb);
pnb.add(txtb);
pnCenter.add(pnb);
JPanel pnc=new JPanel();
JLabel lblc=new JLabel(“nhập c:”);
Trang 42final JTextField txtc=new JTextField(15);
pnc.add(lblc);
pnc.add(txtc);
pnCenter.add(pnc);
JPanel pnkq=new JPanel();
JLabel lblkq=new JLabel(“kết quả nè:”);
final JTextField txtkq=new JTextField(15);
public void actionPerformed(ActionEvent arg0) {
int ret=JOptionPane.showConfirmDialog(null, “Muốn thoát hả?”, “Thoát”, JOptionPane.YES_NO_OPTION);
if(ret==JOptionPane.YES_OPTION)
System.exit(0);
}
});
Trang 43public void actionPerformed(ActionEvent arg0) {
Trang 45public static void main(String[] args) {
PTB2UI ui=new PTB2UI(“ptb2”);
Trang 46===============
public classPTB2Engine {private inta;private intb;private int c;
public PTB2Engine(int a,int b,int c)
Trang 47}
Trang 48return kq;
}
}