1. Swing與NetBeans
使用NetBeans編寫簡單界面。見GUI實驗參考文件中的0.第06次實驗(圖形程序設計、事件處理與Swing).doc
題目1: Swing用戶界面組件與事件處理(請使用Eclipse,不要使用NetBeans,手寫界面布局與事件監聽器代碼)

需完成如上界面。請在以下代碼的基礎上進行修改
import javax.swing.JFrame;
public class HelloWorldSwing {
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//your code
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
1. 布局偽代碼
- 整個窗體界面分成兩部分:分別對應
BorderLayout的centre與south。新建布局layout。 - 在layout的center放入一個JPanel,將其布局管理器設置成
GridLayout,分別放入兩個JLable與JTextField - 在layout的south放入一個JPanel,然后在該面板上放置兩個按鈕btn1 ,btn2。注:JPanel默認布局為
FlowLayout。 - 在btn1上注冊事件監聽器,功能:
點擊登錄按鈕,如果用戶名、密碼相同則提示“用戶名密碼正確!”,否則提示“用戶名密碼錯誤!”。說明:提示信息可使用輸入對話框、信息對話框、確認對話框實現。
2.參考代碼
BorderLayout參考代碼
JFrame f = new JFrame("BorderLayoutTest");
f.setLayout(new BorderLayout());
f.add(new JButton("North"), BorderLayout.NORTH);
f.add(new JButton("South"), BorderLayout.SOUTH);
f.add(new JButton("East"), BorderLayout.EAST);
f.add(new JButton("West"), BorderLayout.WEST);
f.add(new JButton("Center"), BorderLayout.CENTER);
f.setSize(600, 600);
f.setVisible(true);
GirdLayout參考代碼
JFrame frame = new JFrame("GridLayout Test");
JPanel panel = new JPanel(new GridLayout(2,2));
panel.add(new JButton("btn1"));
panel.add(new JButton("btn2"));
panel.add(new JButton("btn3"));
panel.add(new JButton("btn4"));
frame.add(panel);
各種對話框參考代碼
//輸入對話框
String x = JOptionPane.showInputDialog("請輸入變量x的值:");
System.out.println("x="+x);
//消息對話框:用來顯示消息。
JOptionPane.showMessageDialog(null, "消息對話框");
//確認對話框:根據不同的選擇會有不同的返回值
int choice = JOptionPane. showConfirmDialog(null, "請選擇");
/*
JOptionPane.YES_OPTION
JOptionPane.NO_OPTION
JOptionPane.CANCEL_OPTION
上面的幾個都是預先定義好的常量,比如
JOptionPane.YES_OPTION等於0
使用常量使代碼可讀性更好
*/
對話框參考資料:Java中對話框的彈出
3.改進
- 界面中的JTextField組件邊緣與其他組件緊貼在一起,請使用
BorderFactory為其添加邊框。 - 如何讓登錄界面更美觀一點,比如插入背景圖。
題目2: NetBeans基本使用(用戶信息更改模塊)

-
NetBeans簡介、圖形界面設計器、簡單布局、組件布置(如,輔助線、組件對齊等)、組件變量名
-
事件處理代碼。NetBeans常用快捷鍵:
ctrl+\(代碼提示),Tab(自動完成,比如sout,然后按tab),Alt+Insert(自動生成代碼,類似Eclipse中的Alt+Shift+S) -
使用
JPanel布置組件,設置帶標題的邊框。 -
使用不同風格的外觀。右鍵點擊JFrame,選擇Preview Design.
-
按鈕監聽器代碼中包含3部分代碼(引入MVC模式):
- 獲取文本框數據並進行簡單判斷。如,name、age文本框不能為空。如果為空則彈出對話框提示“name不能為空”,並重設焦點(文本框的
requestFocus方法)到相應的文本框。 - 業務邏輯代碼:對數據按照業務要求進行判斷(如,提示年齡不能小於0)與處理(如對年齡+1)。
- 將處理后的數據更新到下方標簽。
- 獲取文本框數據並進行簡單判斷。如,name、age文本框不能為空。如果為空則彈出對話框提示“name不能為空”,並重設焦點(文本框的
-
使用MVC模式解釋並改造上述代碼。
-
常見問題:
- 組件與其變量名的對應關系。組件變量名最好要有意義,能體現出其類型,比如
nameTextField就是一個顯示姓名的JTextField。 - 未將主窗體設置為主類無法啟動。右鍵點擊項目-屬性(Properties)-運行(Run),設置正確的主類(Main Class)。
- 文本類型轉化為數值類型時可能出錯。常見錯誤:當字符串前后帶空格時,當文本框輸入的字符串為非數字的時候。
- GUI程序的發布:
- 方法1:生成可執行jar文件。參見參考資料
5.NetBeans生成可執行GUI jar程序.doc - 方法2:創建批處理腳本
Run.bat執行jar程序。
@echo off start javaw -jar GUI1.jar - 方法1:生成可執行jar文件。參見參考資料
4.進階思考:
嘗試在NetBeans上操作布局管理器、添加事件處理代碼,實現題目1的界面與功能。
對比NetBeans自動生成的代碼與自己手寫的代碼有何不同?(從布局管理器與事件處理代碼這兩個方面來分析)
題目3:數據交換與MVC模式
演示:DataExchangeTest.java。該文件見參考資料重要:GUI實驗參考文件。
講解:結合課件中的數據交換例子進行代碼講解。
題目4:使用NetBeans設計復雜用戶界面
演示:
- 添加菜單欄、菜單、菜單項等,怎么為菜單項添加事件處理程序。
- 為程序添加一個JDialog。為JDialog設置BorderLayout,在BoderLayout上添加JPanel后,右鍵點擊JPanel屬性-Layout-Direction設置其在BorderLayout的方位。JDialog模式設置(modal屬性)。
- 為JPanel設置布局管理器GridLayout。
- 添加另一個JPanel,添加JButton,將該JPanle放到JDialog的south(可以右鍵點擊JDialog,選擇
Add From Palette)。在Button中編寫隱藏jDialog代碼(jDialog.setVisible(false))。 - 使用“彈簧”(Vertical gap, Horizontal gap)調整組件位置。
- 在某個菜單項上添加彈出JDiaolg代碼(
jDialog.pack();jDialog.setVisible(true);)。
任務:
- 使用MVC模式仿照題目3創建一個GUI程序。
- 在演示的基礎上增加一個新的JDialog,上面放置JTable進行題目5的展示。
題目5:在NetBeans中使用JTable
演示:
怎么在Netbeans中設置JTable控件的屬性。右鍵點擊JTable,點擊Table Contents
進階:
為JTable編寫自己的TableModel。可參考DefaultTableModel的實現。
重要參考資料:JTable案例中如何使用JTable。詳見其中的jTableDemo,使用代碼控制JTable。
參考資料:
Java GUI 中的JTable-Netbeans設置
Create and use Java Table in NetBeans
JTable常見用法細則-主要講DefaultTableModel的使用
題目6:其他可選題目
查看以下參考資料,並思考Student做什么:StudentController做什么?StudentView做什么?他們之間是什么關系?
5.1 模仿Windows記事本,編寫一個簡易記事本。
5.2 嘗試使用MVC模式編寫購物車、學生管理系統、計算器等程序。
參考資料:
其他問題
1.系統安裝JDK 9以上,在Eclipse編寫Swing程序,提示javax.swing cannot be resolved to a type
原因:JDK 9及以上引入模塊系統,java swing相關包默認沒有被導入。
解決:需要在Eclipse項目中的module-info.java加入requires java.desktop;。注意:請安裝較高版本的Eclipse。
2.無法安裝NetBeans,提示找不到JRE。或者安裝成功,打開后,就是無法新建項目。
原因:NetBeans 8.2還不支持JDK 9及以上。
解決:安裝JDK 8或者安裝Netbeans 9.0。有可能還需要修改netbeans安裝目錄\etc下的netbeans.conf文件,修改里面的netbeans_jdkhome的值為jdk8的安裝目錄。注意:NetBeans 9.0安裝后無法運行,也可考慮通過修改netbeans_jdkhome來解決,將其設置為jdk9及以上的安裝目錄。
參考資料:Can't create project on Netbeans 8.2
本次實驗參考資料:
重要:視頻-使用Netbeans編寫GUI
重要:GUI實驗參考文件
Java中對話框的彈出
JTable常見用法細則-主要講DefaultTableModel的使用
JTable用法-進階
Swing組件使用系列文章
官方文檔-在 NetBeans IDE 中設計 Swing GUI
官方文檔-在 Java GUI 應用程序中處理圖像(如,設置背景圖片)
官網-使用Netbeans開發企業應用的一些案例
官方文檔-Java Tutorial-Swing
其他參考資料
Java Swing Tutorial
各種計算機技術的Tutorial
第一篇 開始學習JavaFX
Open JavaFX
MVC模式簡介-主要看StudentController是怎樣協調Model與View
Java游戲參考資料
雖然使用Java開發的游戲(如MineCraft)較少,但初學Java 2D,可嘗試使用Java編寫一些簡單的小游戲。主要學習Java游戲入門1-Java 2D games tutorial中的圖形界面游戲基本原理:Basics、Animation、Moving sprites、Collision detection。知其然、知其所以然。怎么學?先把程序跑起來,然后嘗試看懂程序並進行改造。
參考資料:
Java游戲入門:
Java游戲入門1-Java 2D games tutorial
Java游戲入門2-南洋理工大學的-Java Game Programming
Introduction to JavaFX for Game Development
Java游戲框架:
2D Java Game Library-Slick2D,基於LWJGL
Java 3D游戲引擎-JMonkeyEngine,基於LWJGL
Java游戲第三方庫:
Lightweight Java Game Library 3(LWJGL)-OpenGL、OpenAL、OpenCL偏向底層處理-
GUI實驗參考文件說明:
0.第06次實驗(圖形程序設計、事件處理與Swing).doc
1.使用NetBeans設計GUI(by zhrb).doc-NetBeans教程。
2.NetBeans使用腳本.txt
3.一個簡單的包括菜單的GUI小程序(SwingTest).zip-手寫GUI示例代碼(包含CardLayout、窗體間傳遞數據、MVC模式、外觀觀感、窗口放在屏幕中央等演示)。
4.DataExchangeTest.java-數據在GUI中如何傳遞。
