基於 JavaSwing 的招生信息管理系統的實現

背景

昨天實現了一個基於 Java Swing 的招生信息管理系統,這個比以前做的複雜一點,它包含兩個管理功能,通過菜單切換。每個功能都有增、刪、改、查,數據使用文件保存到磁盤中,可在此基礎上添加或修改爲任意新信息的管理功能。

本文來介紹一下這個簡單系統的結構和實現要點,這是運行效果圖

功能介紹

作爲 Java Swing 學習的練習題,它包含的功能有用戶註冊、登錄;學校招生項目信息管理菜單:增、刪、改、查;用戶預約報班信息管理菜單:增、刪、改、查。

第一步,繪製功能結構圖:
在這裏插入圖片描述
第二,系統登錄後的主頁面,包含兩個一級菜單。
在這裏插入圖片描述
第三,主菜單包括“系統功能” 和“關於”。“系統功能” 對應兩個子管理功能,點擊菜單時跳到對應 List 的 Frame 窗體,列表窗體都含包添加、刪除、修改按鈕。“關於” 菜單,點擊“退出”可結束程序。
在這裏插入圖片描述
培訓項目信息錄入界面:
在這裏插入圖片描述

類圖結構

Swing 實現簡單的信息管理功能,包括增、刪、改、查、列表、數據信息操作類,PrjectListFrame 和 ClassOrderListFrame 所關聯的功能類是一套類似。
所以對整個系統抽取的功能類圖結構如下:
在這裏插入圖片描述

JComboBox 使用坑點

使用 Swing 繪製頁面的時候,發現 Box 是非常好用的容器組件。信息輸入框一般是 label 和文本域,創建一個水平 Box 加入兩個組件即可:

JLabel titleLabel=new JLabel("項目名稱:");
Box titleRow= Box.createHorizontalBox();
titleRow.add(titleLabel);
titleRow.add(titleJText);

本文的應用實現過程中,用到了 JComboBox ,因爲課程預約的項目名稱必須是系統錄入的項目名稱。需要先查詢所有的項目,然後填充到 JComboBox 中,讓用戶選擇,不用文本域,以避免無效數據的產生。

此時,如果還是直接添加到 Box 中的話,佈局就會很難看:

        JLabel isChoosenLabel=new JLabel("是否招滿:");
		jcomb.addItem("否");
		jcomb.addItem("是");
		jcomb.setPreferredSize(new Dimension(333, 20));
		jp.add(isChoosenLabel);
		jp.add(jcomb);
		Box isChoosenBox= Box.createHorizontalBox();
		isChoosenBox.add(isChoosenLabel);
		isChoosenBox.add(jcomb);

直接添加下拉框到 Box 的運行效果圖:
在這裏插入圖片描述
這樣將下拉框放在 Box 中,下拉框的大小是無法控制。

解決方案:查找了一些資料,最終找到的解決方案是,將 JComboBox 放在 JPanel 中,同時設置它的最佳 Size 。

這樣才能讓這一項跟前面對齊,修正添加下拉框的代碼:

        JPanel jp=new JPanel();
		JLabel isChoosenLabel=new JLabel("是否招滿:");
		jcomb.addItem("否");
		jcomb.addItem("是");
		jcomb.setPreferredSize(new Dimension(333, 20));
		jp.add(isChoosenLabel);
		jp.add(jcomb);
		Box isChoosenBox= Box.createHorizontalBox();
		isChoosenBox.add(jp);

jcomb.setPreferredSize(new Dimension(333, 20)) 這是關鍵代碼,它可以調整距離 Label 的位置,再運行界面就齊整了:
在這裏插入圖片描述

進一步優化: 測試發現 JComboBox 所在父組件 JPanel 如果不設置大小,那麼它與底部按鈕的距離會很高,導致界面不勻稱。
在這裏插入圖片描述
而且 JPanel 的 setSize 根本不生效 ,只有 jp.setMaximumSize(new Dimension(700, 30)); 才能控制面板的大小。

編程啓示錄

對大多數讀者來說,本文只有一個有價值的信息,就是 JComboBox 怎麼和 Box 一起創建一行大小適中的表單界面可點擊查看運行效果

核心代碼就是這兩行:

jp.setMaximumSize(new Dimension(700, 30)); // 控制面板大小
jcomb.setPreferredSize(new Dimension(333, 20)); // 控制下拉框大小
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章