最近接觸到GUI圖形界面設計,需要自學,無意間發現了eclipse中的一個插件WindowBuilder,使用起來方便而且效率很高,果斷拋棄了自己敲代碼的念頭,下面簡單記一下我在eclipse商店中的安裝,然后是我目前學到的一些使用方法,很多都是按著我自己的想法說的,說的可能不專業有錯誤還請指正,
WindowBuilder插件
- 一、安裝
- 二、使用
- 1.創建程序
- 2.常規選項認識
- 3.規范
- 4.圖示[^1]
- 三、登陸及跳轉
- 1.資料庫
- 2.eclipse
- 四、源代碼
一、安裝
- 打開eclipse,在工具列的幫助(help)選項中選擇Eclipse MarketPlace,進入商店,

2.在搜索欄輸入插件名WindowBuilder,點擊install下載安裝(我肯定選下載最多的…)

3.一路默認,完成后會跳到后臺安裝,在進度中可以看到進度,大概需要十分鐘裝好,詢問是否重啟,



4.重啟后順便見到了久違的歡迎,
5.然后可以找到裝好的WindowBuilder,依次選擇檔案-新建-其他,

6.可以看到新添加了一個WindowBuilder選項,

二、使用
1.創建程序
- 依次創建一個Java專案 WindowBuilderUse,包 view

- 選中 view 包,右鍵依次選擇 新建 > 其他 > WindowBuilder > Swing Designer > JFrame,在彈出的框里填寫型別名稱 LoginView ,



- 創建成功后會自動生成一段代碼,在左下角可以看到兩個模式 Source 和 Design,Sourse為源代碼,Design為界面設計,


有時候可能會遇到下面這種情況
我是遇到過這種情況,解決方法是在自動生成的 module-info.java 類中添加一行代碼,
module WindowBuilderUse {
requires java.desktop;
}


2.常規選項認識
我是把它分了五個部分,具體的選單欄我就暫時只寫一些我目前用過的,后續會再添加或改正,

- Part 1 (構造) 對應著你設計的結構,當你點擊的時候會互相回應,比如你在部分1點擊(java.swing.JFrame), 部分5的表單就會凸顯,反之亦然.
- Part2 (屬性) 對應著你選中的某一結構的具體細節
比如當我們選中表單

最常用到的是
background 設定表單的背景顏色
defaultCloseOperaion 設定用戶在此表單上發起 “close” 時默認執行的操作
iconImage 設定表單的圖示
resizable 設定大小可調
title 設定表單的標題
當我們選中內容面板

Layout 設定布局,默認是 BorderLayout 布局,但是在這里我用的最多的是 GroupLayout 布局,
- Part3
我就用到了下面帶三角的這一個,點擊后可以快速測驗,看看做的怎么樣不需要你運行代碼,

- Part4(組件)里面都是可以根據你的需要塞進去的組件,我用的最多的是Components和Menu

JLabel 標簽
JTextField 文本框
JComboBox 下拉串列
JButton 按鈕
JRadioButton 單選按鈕
JTextArea 文本區域
JPasswordField 密碼框
JList 串列
JTable 表格
JMenu 選單
JMenuBar 選單條
JMenuItem 選單項
- Part5 就是你手動設計的圖形界面
你可以直接點中你要添加的組件,再換到界面上直接塞進去(在此之前先選擇好你希望的面板的布局),下面就緊接著寫幾個組件的屬性,基本上大同小異,撿幾個常用的,

這是標簽LTabel的屬性
font可以設定文字字體,字形,字號
icon同樣也是圖示
text是顯示在外面的文本,類似于表單的標題

這是下拉串列的屬性,主要是 model 屬性,點擊后彈出來一個框,如下圖輸入,可以添加多個選項,用回車隔開就可以,點擊確認后關閉,可以點擊上面講的快速測驗按鈕看看效果如何,


關于選單欄的設定
(1)首先是選中表單,在表單上添加選單條 JMenuBar,當你的滑鼠移動到表單里面,就會自動提示你應該放在綠色區域的位置,

放好后顯示下圖

(2)然后添加選單JMenu,同樣的當你滑鼠移動到表單內會有一條紅線自動提示你放在哪里,如下圖:

放好后如下圖所示:

你可以繼續橫向或豎向添加選單JMenu,你也可以選擇選單項JMenuItem,兩者區別在于JMenu可再分,而JMenuItem不可再分,觀察下圖可以很明顯的看出來 “檔案” “新建”“保存”都是可再分的JMenu,“word檔案”“excel表格”則是不可再分的最后一級JMenuItem,

3.規范
每個組件都有一個名字,要習慣規范的命名,最起碼自己看的懂,一看名字知道是哪個組件,特別是塞了很多個同樣的組件,比如添加了很多個標簽,你可以在右邊的圖形上直接選中后右鍵 (或者在Part1構造部分選中后再右鍵),選擇Rename重命名,最簡單的你可以把賬號標簽由默認的 lblNewabel 重命名為 zhanghaolblNewLabel ,密碼標簽由默認的 lblNewabel_1 重命名為 mimalblNewLabel_1,

可以看到結果如下圖:


4.圖示1
圖示是我覺得必不可少的部分,因為好看…特別是至少可以替代咖啡
圖示的存放位置最好是塞到專案里作為相對路徑,我理解的是使用絕對路徑的話當你換了地方就沒辦法呼叫了,比如沒辦法在另一臺電腦上呼叫你這臺電腦的圖片,相對路徑就可以一直跟著你,
我們可以在這個專案下新建一個檔案夾,命名為images,把我們用到的圖示放進去,


可以自行在網上下載需要的圖示,直接復制粘貼到上文中新建的檔案夾里即可,

添加也很簡單,先選中一個需要的
比如說表單,我們選中屬性 iconImage ,勾選第一個 Classpath resource ,依次選擇你需要的圖示然后選擇確定,同樣的可以給所有可以添加圖示的組件添加圖示(其他就可能是 icon 屬性),


可能會遇到大小不合適的情況,我開始的時候總是很大,后來調整了大小都是 16 x 16,我在下面推薦了一個圖示庫很好用,可以直接下載需要的大小,
三、登陸及跳轉
1.資料庫
我目前用的都是SQL Server ,建個表存點資料都大差不差,
關于 eclipse和SQL Server 的連接請戳這里
1.創建一個資料庫,然后新建一張用戶表,存入你的賬號密碼,簡單就好,記住你的資料庫名和用戶表名,我這里分別是 TEXT 和 hl_admin ,


2.eclipse
1.新建一個 dao 包,再建一個 Database 類,專門來裝資料庫方面的操作,
/**
* 資料庫連接類
* @author zhangsan
*
*/
public class Database {
String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
//首先要在資料庫中新建一個叫 TEXT 的資料庫
String conStr = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=TEXT";
// 資料庫連接用戶名
String dbUserName = "sa";
// 資料庫連接密碼
String dbPassword = "991230";
private static Connection con = null;
public Database() {
try {
Class.forName(driverName);
System.out.println("[加載驅動成功]");
}
catch (Exception sqlEx) {
sqlEx.printStackTrace();
System.out.println("[加載驅動失敗]");
}
try{
con=DriverManager.getConnection(conStr,dbUserName,dbPassword);
System.out.println("SQL Server連接成功!");
}
catch(Exception ex){
ex.printStackTrace();
System.out.print("SQL Server連接失敗!");
}
}
public static Connection getCon() {
return con;
}
/**
* 關閉資料庫連接
* @throws SQLException
*
*/
public void closeCon(Connection con) throws SQLException{
if(con!= null) {
con.close();
}
}
/**
* 管理員登錄
*
* @param username
* @param password
* @return
*/
public static boolean adminLogin(String username, String password) {
String sql = "select Username from hl_admin where Username=? and Password=?";
boolean flag = false;
try {
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
flag = true;
}
rs.close();
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
}
2.在LoginView類添加一個登錄按鈕

-
右鍵選擇 Add event handler > action > actionPerformed 會自動跳到代碼區


-
創建一個方法 LoginAvt ,實作登錄功能
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
LoginAvt(ae);
}
});
-
直接在提示里選擇 在型別LoginView中創建方法...

-
在下面找到生成的代碼,敲進去
protected void LoginAvt(ActionEvent ae) {
// TODO 自動生成的方法存根
String username = zhanghaotextField.getText().toString();
String password = mimapasswordField.getText().toString();
//判斷字串是否為空,這里是如果不為空,繼續,
if(!zhanghaotextField.getText().isEmpty() && !mimapasswordField.getText().isEmpty())
{
//當點擊登錄按鈕時,首先與資料庫建立連接
Database.getCon();
boolean result = Database.adminLogin(zhanghaotextField.getText().trim(), mimapasswordField.getText().trim());
if(result){
//登錄成功
new MainMenu().setVisible(true); //打開新界面MainMenu
this.setVisible(false);//關閉本界面
}else{
//登錄失敗
JOptionPane.showMessageDialog(null, "登錄名或密碼錯誤,請重新登錄!", "提示", JOptionPane.ERROR_MESSAGE);
}
}else if(zhanghaotextField.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"請輸入用戶名","提示訊息",JOptionPane.WARNING_MESSAGE);
}else if(mimapasswordField.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"請輸入密碼","提示訊息",JOptionPane.WARNING_MESSAGE);
}
}
事件處理機制摘要:
監聽器物件是一個實作了特定監聽器介面(listener interface)的類的實體,
事件源是一個能夠注冊監聽器物件并發送事件物件的物件,
當事件發生時,事件源將事件物件傳遞給所有注冊的監聽器,
監聽器物件將利用事件物件中的資訊決定如何對事件做出回應,
現在,只要按鈕產生了一個“動作事件”,listener 物件就會得到通告,對于按鈕來說,這個“動作事件”就是我們點擊按鈕,
為了實作 ActionListener 介面,監聽器類必須有一個被稱為 actionPerformed 的方法,該方法接受一個 ActionEvent 物件引數,
只要用戶點擊按鈕,JButton 物件就會創建一個ActionEvent 物件,然后呼叫listener.action Performed(event) 傳遞事件物件,可以將多個監聽器物件添加到一個像按鈕這樣的事件源中,這樣一來,只要用戶點擊按鈕,按鈕就會呼叫所有監聽器的 actionPerformed 方法,
3.在 view 包里再以同樣的方法做一個主界面 MainMenu類 作為登陸后的跳轉界面

4.運行代碼,彈出登陸界面,正確輸入賬號密碼,彈出主界面,
四、源代碼
/**
* 登陸界面
* @author zhangsan
*
*/
public class LoginView extends JFrame {
private JPanel contentPane;
private JTextField zhanghaotextField;
private JPasswordField mimapasswordField;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
new LoginView().setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public LoginView() {
setIconImage(Toolkit.getDefaultToolkit().getImage(LoginView.class.getResource("/images/\u7BA1\u7406.png"/>安利一個圖示的素材庫 ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254544.html
標籤:其他
上一篇:TCP/IP模型以及OSI七層參考模型各層的功能介紹和主要協議
下一篇:從自拍到人臉識別


