1. 程式人生 > >劉志梅2017710101152.《面向物件程式設計(java)》第十二週學習總結

劉志梅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:

執行下列程式,觀察程式執行結果。

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);    

   }

}

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,結合程式執行結果理解程式;與上面程式對比,思考異同;

掌握空框架建立方法;

瞭解主執行緒與事件分派執行緒概念;

掌握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

elipse IDE中除錯執行教材412頁程式10-2,結合程式執行結果理解程式;

掌握確定框架常用屬性的設定方法。

測試程式3

elipse IDE中除錯執行教材418頁程式10-3,結合執行結果理解程式;

掌握在框架中新增元件;

掌握自定義元件的用法。

測試程式4

elipse IDE中除錯執行教材424 -425頁程式10-4,結合程式執行結果理解程式;

掌握2D圖形的繪製方法。

測試程式5

elipse IDE中除錯執行教材432-433程式10-5,結合程式執行結果理解程式;

瞭解2D圖形中字型的設定的方法;

測試程式6

elipse IDE中除錯執行教材436-437程式10-6,結合程式執行結果理解程式;

瞭解2D圖形影象的顯示方法。

實驗2課後完成PTA平臺題目集:2018秋季西北師範大學面向物件程式設計(Java)練習題集(ch6-ch9)

實驗總結:通過本週實驗學習了AWT和Swing,還有框架的建立、顯示影象等,知道了使用者介面和圖形使用者介面、AWT元件、Swing元件及層次關係,AWT和Swing之間的關係,還有容器及容器巢狀等等。