Java第05次實驗提綱(Java圖形界面編程)


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. 布局偽代碼

  1. 整個窗體界面分成兩部分:分別對應BorderLayout的centre與south。新建布局layout。
  2. 在layout的center放入一個JPanel,將其布局管理器設置成GridLayout,分別放入兩個JLable與JTextField
  3. 在layout的south放入一個JPanel,然后在該面板上放置兩個按鈕btn1 ,btn2。注:JPanel默認布局為FlowLayout
  4. 在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.改進

  1. 界面中的JTextField組件邊緣與其他組件緊貼在一起,請使用BorderFactory為其添加邊框。
  2. 如何讓登錄界面更美觀一點,比如插入背景圖。

題目2: NetBeans基本使用(用戶信息更改模塊)

  • NetBeans簡介、圖形界面設計器、簡單布局、組件布置(如,輔助線、組件對齊等)、組件變量名

  • 事件處理代碼。NetBeans常用快捷鍵:ctrl+\(代碼提示),Tab(自動完成,比如sout,然后按tab),Alt+Insert(自動生成代碼,類似Eclipse中的Alt+Shift+S)

  • 使用JPanel布置組件,設置帶標題的邊框。

  • 使用不同風格的外觀。右鍵點擊JFrame,選擇Preview Design.

  • 按鈕監聽器代碼中包含3部分代碼(引入MVC模式):

    1. 獲取文本框數據並進行簡單判斷。如,name、age文本框不能為空。如果為空則彈出對話框提示“name不能為空”,並重設焦點(文本框的requestFocus方法)到相應的文本框。
    2. 業務邏輯代碼:對數據按照業務要求進行判斷(如,提示年齡不能小於0)與處理(如對年齡+1)。
    3. 將處理后的數據更新到下方標簽。
  • 使用MVC模式解釋並改造上述代碼。

  • 常見問題:

  1. 組件與其變量名的對應關系。組件變量名最好要有意義,能體現出其類型,比如nameTextField就是一個顯示姓名的JTextField
  2. 未將主窗體設置為主類無法啟動。右鍵點擊項目-屬性(Properties)-運行(Run),設置正確的主類(Main Class)。
  3. 文本類型轉化為數值類型時可能出錯。常見錯誤:當字符串前后帶空格時,當文本框輸入的字符串為非數字的時候。
  • GUI程序的發布:
    • 方法1:生成可執行jar文件。參見參考資料5.NetBeans生成可執行GUI jar程序.doc
    • 方法2:創建批處理腳本Run.bat執行jar程序。
        @echo off
        start javaw -jar GUI1.jar
    

4.進階思考:
嘗試在NetBeans上操作布局管理器、添加事件處理代碼,實現題目1的界面與功能。
對比NetBeans自動生成的代碼與自己手寫的代碼有何不同?(從布局管理器與事件處理代碼這兩個方面來分析)

題目3:數據交換與MVC模式

演示:DataExchangeTest.java。該文件見參考資料重要:GUI實驗參考文件
講解:結合課件中的數據交換例子進行代碼講解。

題目4:使用NetBeans設計復雜用戶界面

演示:

  1. 添加菜單欄、菜單、菜單項等,怎么為菜單項添加事件處理程序。
  2. 為程序添加一個JDialog。為JDialog設置BorderLayout,在BoderLayout上添加JPanel后,右鍵點擊JPanel屬性-Layout-Direction設置其在BorderLayout的方位。JDialog模式設置(modal屬性)。
  3. 為JPanel設置布局管理器GridLayout。
  4. 添加另一個JPanel,添加JButton,將該JPanle放到JDialog的south(可以右鍵點擊JDialog,選擇Add From Palette)。在Button中編寫隱藏jDialog代碼(jDialog.setVisible(false))。
  5. 使用“彈簧”(Vertical gap, Horizontal gap)調整組件位置。
  6. 在某個菜單項上添加彈出JDiaolg代碼(jDialog.pack();jDialog.setVisible(true);)。

任務:

  1. 使用MVC模式仿照題目3創建一個GUI程序。
  2. 在演示的基礎上增加一個新的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模式編寫購物車、學生管理系統、計算器等程序。

參考資料:

MVC模式簡介-主要看StudentController是怎樣協調Model與View

其他問題

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中如何傳遞。

參考鏈接

Java第06次實驗提綱(集合)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM