劉志梅2017710101152.《面向物件程式設計(java)》第十二週學習總結
實驗十二 圖形程式設計
實驗時間 2018-11-14
1、理論知識
(1) 基本AWT庫採用將處理使用者介面元素的任務委派給每個目標平臺的本地GUI工具箱的方式,由本地GUI工具箱負責使用者介面元素的建立和動作。
選擇Swing的幾個原因:Swing擁有一個豐富、便捷的使用者介面元素集合;Swing對底層平臺依賴的很少,因此與平臺相關的bug很少;Swing給予不同平臺的使用者一致的感覺。
Swing沒有完全的替代AWT,而是基於AWT架構之上。
(2) 在Java中,頂層視窗(就是沒有包含在其它視窗中的視窗)被稱為框架。
在AWT庫中有一個稱為Frame的類,用於描述頂層視窗;JFrame是極少數幾個不繪製在畫布上的Swing元件之一。
在包含多個框架的程式中,不能在使用者關閉其中一個框架時就讓程式退出(退出main並沒有終止程式,終止的只有主執行緒)。
(3) JFrame類本身只包含若干個改變框架外觀的方法。
從JFrame的各個超類中繼承了許多用於處理框架大小和位置的方法,以下有幾個較為重要的:setLocation和setBounds方法用於設定框架的位置;setIconImage用於告訴視窗系統在標題欄、任務切換視窗等位置顯示那個圖示;setTitle用於改變標題欄的文字;setResizable利用一個boolean值確定一個框架的大小是否允許使用者改變。
元件類的很多方法是以獲取/設定方法對形式出現的;屬性包含性名和型別。
如果沒有明確地指定框架的大小,所有框架的預設值為0*0畫素(對於專業應用程式來說,應該檢查螢幕的解析度,並根據解析度編寫程式碼重置框架的大小)。
(4) paintComponent方法有一個Graphics型別的引數,這個引數儲存著用於繪製圖像和文字的設定。
無論何種原因,只要視窗需要重新繪圖,事件處理器就會通告元件,從而引發執行所有元件的paintComponent方法;一定不要自己呼叫paintComponent方法。
(5)要想使用JAVA 2D庫繪製圖形,需要獲得一個Graphics2D類物件。
使用JAVA 2D圖形類或許會增加一些複雜度。
(6)使用Graphics2D類的setpaint方法可以為圖形環境上的所有後續的繪製操作選擇顏色;要想繪製多種顏色,就需要按照選擇顏色、繪製圖形、再選擇另外一種顏色、再繪製圖形的過程實施。
要想設定背景顏色,就需要使用Component類中的setBackground方法。
(7)字型名可以商標化,字型設計在一些許可權內可以版權化。
要想使用某種字型繪製字元,必須首先利用指定的字型名、字型風格和字型大小來建立一個Font類物件。
需要知道字串佔據的寬和高的畫素數量取決於以下三個元素:使用的字型、字串、繪製字型的裝置。
行間距是某一行的坡底與其下一行的坡頂之間的空隙;字型高度是連續兩個基線之間的距離,它等於下坡度+行間距+上坡度。
(8)一旦影象儲存在本地檔案或因特網的某個位置上,就可以將他們讀到Java應用程式中,並在Graphics物件上進行顯示。
2、實驗內容和步驟
實驗1: 匯入第10章示例程式,測試程式並進行程式碼註釋。
測試程式1:
l 執行下列程式,觀察程式執行結果。
import javax.swing.*; public class SimpleFrameTest { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setBounds(0, 0,300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } |
l
import javax.swing.*; public class SimpleFrameTest { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setBounds(0,0,300, 200); //0,0表示的是執行後框所顯示的位置,300表示框長200為框的寬 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); //如果將TRUE改為FALSE那麼執行後的框不會出現 } }
在elipse IDE中除錯執行教材407頁程式10-1,結合程式執行結果理解程式;與上面程式對比,思考異同;
l 掌握空框架建立方法;
l 瞭解主執行緒與事件分派執行緒概念;
l 掌握GUI頂層視窗建立技術。
package simpleFrame; import java.awt.*; import javax.swing.*; /** * @version 1.33 2015-05-12 * @author Cay Horstmann */ public class SimpleFrameTest { public static void main(String[] args) { EventQueue.invokeLater(() -> { SimpleFrame frame = new SimpleFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }); } } class SimpleFrame extends JFrame { private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200; public SimpleFrame() { setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); } }
測試程式2:
l 在elipse IDE中除錯執行教材412頁程式10-2,結合程式執行結果理解程式;
l 掌握確定框架常用屬性的設定方法。
測試程式3:
l 在elipse IDE中除錯執行教材418頁程式10-3,結合執行結果理解程式;
l 掌握在框架中新增元件;
l 掌握自定義元件的用法。
測試程式4:
l 在elipse IDE中除錯執行教材424 -425頁程式10-4,結合程式執行結果理解程式;
l 掌握2D圖形的繪製方法。
測試程式5:
l 在elipse IDE中除錯執行教材432頁-433程式10-5,結合程式執行結果理解程式;
l 瞭解2D圖形中字型的設定的方法;
測試程式6:
l 在elipse IDE中除錯執行教材436頁-437程式10-6,結合程式執行結果理解程式;
l 瞭解2D圖形影象的顯示方法。
實驗2:課後完成PTA平臺題目集:2018秋季西北師範大學面向物件程式設計(Java)練習題集(ch6-ch9)
實驗總結:通過本週實驗學習了AWT和Swing,還有框架的建立、顯示影象等,知道了使用者介面和圖形使用者介面、AWT元件、Swing元件及層次關係,AWT和Swing之間的關係,還有容器及容器巢狀等等。