1. 程式人生 > >Java自學之路-Java基礎教程-42:Java的UI介面AWT和Swing元件

Java自學之路-Java基礎教程-42:Java的UI介面AWT和Swing元件

在學Java的初期,其實很不情願地學,這面向物件的語言還是和C語言似的,沒有什麼介面的呢,也不能在桌面上執行呢。能不能像電腦裡的桌面軟體一樣,雙擊就可以開啟?能不能像其他桌面軟體一樣,可以輸入文字,可以有按鈕或選單什麼的?能不能搞出一個滑鼠點點就能用的軟體出來?其實Java也可以做到的。

Java中有UI元件,如AWT元件和Swing元件,可以做出有按鈕有下拉選單和輸入框的介面。這類的Java應用也有不少,比如壓力測試軟體Jmeter,記憶體監控軟體Jconsole,專案管理工具Projectj,還有強大的Java編輯工具Eclipse等,都是常用的有介面的Java應用。

AWT,即Abstract Windowing Toolkit抽象視窗工具包,是Java提供的介面視窗控制元件集合。而Swing是在AWT的基礎上又優化的類包,介面有了改進而且更容易操作,可以說Swing是AWT的更高版本。

這裡,我們看一個簡單的例子,用Java開發一個能夠壓縮資料夾或解壓縮一個.ZIP壓縮包。基於這種功能點,至少要有開啟檔案目錄的控制元件,選擇壓縮檔案型別的下拉列表,還有一個開始解壓按鈕和一個開始壓縮按鈕,另外再加一些顯示資訊的文字框。

要做出這個介面,用Java來做還是很簡單的。在Eclipse裡面新建一個類GzipTarToolViewer.java,並建立main()方法,public static void main(String[] args) {},所有的程式寫在main()方法裡面,就完全可以實現上面的介面了。

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
 * This is a GUI view to choose the *.gz or *.tar or *.tar.gz file to extract
 * 
 * @author Administrator
 * 
 */
public class GzipTarToolViewer {

	/**
	 * entry of the program
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		JFrame frame = new JFrame("GzipTarTool");

		JPanel filePanelToCreate = new JPanel(new BorderLayout());

		JPanel selectPanel = new JPanel();

		JButton chooseFileButton = new JButton("Browse And Open File");

		chooseFileButton.setToolTipText("Tip: Open file to extract");

		chooseFileButton.setPreferredSize(new Dimension(200, 30));

		selectPanel.add(chooseFileButton);

		filePanelToCreate.add(selectPanel, BorderLayout.NORTH);

		JPanel actionPanel = new JPanel();

		JComboBox comboBox = new JComboBox();

		comboBox.addItem(".zip");
		comboBox.addItem(".tar");
		comboBox.addItem(".gz");
		comboBox.addItem(".ar");

		comboBox.setSelectedIndex(1);
		actionPanel.add(comboBox);

		JButton extractButton = new JButton("Start Extract");

		extractButton.setToolTipText("Tip: start to extract the file");

		actionPanel.add(extractButton);

		JButton compressButton = new JButton("Start Compress");

		compressButton.setToolTipText("Tip: start to compress the file");

		actionPanel.add(compressButton);

		filePanelToCreate.add(actionPanel, BorderLayout.CENTER);

		JTextArea displayInfo = new JTextArea();

		JScrollPane textResultPane = new JScrollPane(displayInfo, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

		textResultPane.setPreferredSize(new Dimension(500, 500));

		filePanelToCreate.add(textResultPane, BorderLayout.SOUTH);

		frame.setContentPane(filePanelToCreate);

		frame.pack();
		frame.setVisible(true);

	}

}

JFrame frame = new JFrame("GzipTarTool");//新建一個JFrame框,用來裝那些按鈕、下拉列表控制元件等,名字為GzipTarTool。

JPanel filePanelToCreate = new JPanel(new BorderLayout());//新建一個JPanel塊,用來作為佈局容器,比如這裡用簡單的東西南北中佈局BorderLayout。這個佈局物件filePanelToCreate裡面分三塊,上面即北NORTH,放選擇開啟資料夾按鈕。中間即CENTER,放壓縮和解壓按鈕及型別選擇下拉列表控制元件。下面即南SOUTH,放顯示操作的提示資訊。

JPanel selectPanel = new JPanel();

JButton chooseFileButton = new JButton("Browse And Open File");

chooseFileButton.setToolTipText("Tip: Open file to extract");

chooseFileButton.setPreferredSize(new Dimension(200, 30));

selectPanel.add(chooseFileButton);

filePanelToCreate.add(selectPanel, BorderLayout.NORTH);

新建selectPanel物件,並放置新建的JButton按鈕物件chooseFileButton,這個按鈕的名字為"Browse And Open File",滑鼠移到按鈕上的提示資訊是"Tip: Open file to extract",按鈕的大小是200*30。把chooseFileButton按鈕物件add到selectPanel容器裡,再把這個容器放到filePanelToCreate容器的北部佈局即最上面。

JPanel actionPanel = new JPanel();

JComboBox comboBox = new JComboBox();

comboBox.addItem(".zip");
comboBox.addItem(".tar");
comboBox.addItem(".gz");
comboBox.addItem(".ar");

comboBox.setSelectedIndex(1);
actionPanel.add(comboBox);

JButton extractButton = new JButton("Start Extract");

extractButton.setToolTipText("Tip: start to extract the file");

actionPanel.add(extractButton);

JButton compressButton = new JButton("Start Compress");

compressButton.setToolTipText("Tip: start to compress the file");

actionPanel.add(compressButton);

filePanelToCreate.add(actionPanel, BorderLayout.CENTER);
 

新建actionPanel物件,並放置新建的JComboBox列表物件comboBox,這個列表的選項為".zip"、".tar"、".gz"、".ar",並設定第一個選項預設被選中。還要再新建extractButton和compressButton兩個物件作為解壓按鈕和壓縮按鈕,並把它們add到actionPanel容器裡,再把這個容器放到filePanelToCreate容器的中間佈局即最中間。

JTextArea displayInfo = new JTextArea();

JScrollPane textResultPane = new JScrollPane(displayInfo, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

textResultPane.setPreferredSize(new Dimension(500, 500));

filePanelToCreate.add(textResultPane, BorderLayout.SOUTH);
 

新建JTextArea文字顯示物件displayInfo,並新建JScrollPane物件textResultPane用來作為有滾動條的容器,這個容器裝有displayInfo的文字,設定容器的大小為500*500。把textResultPane這個容器放到filePanelToCreate容器的南佈局中即最下面。

frame.setContentPane(filePanelToCreate);

最後把filePanelToCreate放入視窗框frame裡面。

frame.pack();
frame.setVisible(true);
把視窗物件裝載,並設定為顯示視覺化。

經過這樣幾部分的設計和物件建立,在main()方法裡就把這些控制元件用北中南的佈局方式畫出來了。執行這個main()方法,一個簡單的壓縮和解壓縮工具介面就顯示出來了。

這裡只做了介面顯示的功能,還沒有點選反應的動作和處理的動作,要繼續完善才可以真正地實現壓縮和解壓。所以下一步的工作就是給按鈕加上監聽器Listener,並要進行檔案處理。這部分功能也是比較容易實現的,然而目前還未涉及到這些API的使用,所以先放一放等以後再深入優化。

配套進階視訊教程:

Java中级SSHæ¡æ¶é¡¹ç®å¼å设计æç¨