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的使用,所以先放一放等以後再深入優化。
配套進階視訊教程: