面板容器
在窗體應用程式的實際編程中,窗體界面比較複雜,容納的組件也非常多,一些組件在窗體中顯示不出來。在這種情況下,需要把窗體按功能劃分為幾個區域,在每個區域進行組件的添加和管理。Swing提供了JPanel和JscrollPane兩種面板容器,用於解決上面的問題。
面板容器和JFrame窗體一樣,也是繼承Container類,在JFrame窗體中可以添加面板容器。
JPanel面板容器
在JPanel面板容器中可以添加任何組件,JPanel面板容器也是繼承Container類,因此Container類的添加組件的方法都可以使用。
案例1:建立一個窗體類,在窗體類中使用網格布局將窗體空間均勻分成四個網格,在每個網格中添加JPanel面板容器,在JPanel面板容器中添加多個JLabel組件。
在項目PCoreUnit13下新建panel包,在pane包內新建JFramePanelTest類。代碼如下:
packagepanel;import java.awt.GridLayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.SwingConstants;import javax.swing.WindowConstants;/*** @ClassName: JFramePanelTest* @Description: Swing程序設計(面板容器)案例1* @author 編程訓練營* @date**/publicclass JFramePanelTest { /** * @Title: main * @Description: Java程序入口main方法 * @param@param args 參數 * @return void 返回類型 * @throws */publicstaticvoid main(String[] args) { // 實例化JFrame對象 JFrame frame = new JFrame("JPanel示例程序"); // 設置窗體為2行1列的網格布局 frame.setLayout(new GridLayout(2,1,30,30)); // 初始化JPanel面板 JPanel panel1 = new JPanel(new GridLayout(2,1,10,10)); JPanel panel2 = new JPanel(new GridLayout(2,1,10,10)); // 添加JLable組件到panel1 JLabel label1 = new JLabel("這是第一個組件"); label1.setHorizontalAlignment(SwingConstants.CENTER); JLabel label2 = new JLabel("這是第二個組件"); label2.setHorizontalAlignment(SwingConstants.CENTER); panel1.add(label1); panel1.add(label2); // 添加JLable組件到panel2 JLabel label3 = new JLabel("這是第三個組件"); label3.setHorizontalAlignment(SwingConstants.CENTER); JLabel label4 = new JLabel("這是第四個組件"); label4.setHorizontalAlignment(SwingConstants.CENTER); panel2.add(label3); panel2.add(label4); // 添加JPanel到窗體 frame.add(panel1); frame.add(panel2); // 設置窗口的寬度和高度 frame.setSize(500,500); // 窗口居中 frame.setLocationRelativeTo(null); // 設置窗口可見 frame.setVisible(true); //設置窗口關閉方式,窗口關閉程序退出 frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); }}
JScrollPane面板容器
當窗體容納的組件較多或組件內容比較多時,窗體可顯示的部分不能完全顯示全部組件或組件內容。在這種情況下,就可以使用JScrollPane面板,JScrollPane面板帶有兩個滾動條,一個是水平滾動條,一個是縱向滾動條,用戶使用滾動條可以滾動窗體水平或縱向的顯示內容。
JScrollPane面板容器只能容納一個組件,這種問題也非常容易解決,可以把窗體要放置的組件放置到一個JPanel面板容器中,然後再把JPanel面板容器放置到JScrollPane面板容器中,最後把JScrollPane面板容器添加到窗體中。
在pane包內新建JFrameScrollPanelTest類。代碼如下:
importjava.awt.Dimension;import java.awt.FlowLayout;import javax.swing.JScrollPane;* @ClassName: JFrameScrollPanelTest* @Description: Swing程序設計(面板容器)案例2publicclass JFrameScrollPanelTest { JFrame frame = new JFrame("JScrollPane示例程序"); // 設置窗體尺寸 // 實例化JPanel對象 JPanel jpanel = new JPanel(); // 設置jpanel尺寸,尺寸和窗體尺寸相同 jpanel.setPreferredSize(new Dimension(500, 500)); // 設置jpanel為流式布局 jpanel.setLayout(new FlowLayout(FlowLayout.LEFT,20,20)); // 使用循環添加JLabel組件for( int i = 1; i < 100; i++ ) { JLabel label = new JLabel("這是第" + i + "個組件"); jpanel.add(label); } // 實例化JScrollPane對象 JScrollPane scrollpanel = new JScrollPane(jpanel); // 將scrollpanel組件添加到窗體 frame.add(scrollpanel);
使用JScrollPane時,需要注意下面幾項:
JScrollPane只能添加一個組件,該組件可以是JPanel面板容器,當然也可以是其它組件;調用JScrollPane的構造方法實例化對象時,需要傳入JPanel面板容器的實例對象或其它組件的實例對象,傳入的實例對象需要調用setPreferredSize方法來設置JPanel面板容器或組件的尺寸;需要將JScrollPane的實例對象添加到窗體中。標籤組件
標籤組件在窗體中顯示為一個不能編輯的文字區域。該組件只能用於在窗體中輸出文本內容,而不能獲取用戶的文本輸入。它可用於在窗體中顯示必要的文字信息。
標籤組件由JLabel類定義,JLabel類的父類是Jcomponent類。JLabel類定義了多個構造方法,JLabel類常用的構造方法說明如下:
public JLabel()
該方法創建一個JLabel實例對象,該實例沒有圖像,標題為空字符串。
public JLabel(Icon image)
該方法創建一個帶圖標的實例對象。
public JLabel(String text)
該方法創建一個帶文本的實例對象。
public JLabel(String text, Icon icon, int horizontalAlignment)
該方法創建具有指定文本、圖像和水平對齊方式的JLabel實例對象。
JLabel類常用的方法說明如下:
void setText(String text)
該方法用於設置標籤的文本。
String getText()
該方法返回標籤的文本。
void setIcon(Icon icon)
該方法用於設置標籤顯示的圖標。
void setHorizontalAlignment(int alignment)
該方法設置標籤文本的水平對齊方式(例如:居中、兩邊對齊等方式)。參數alignment可以是下列常量值之一:LEFT、CENTER、RIGHT、LEADING。
上面的常量都在WindowConstants類中定義,WindowConstants類在javax.swing包內。
標籤組件在顯示文本的同時,也可以在文本左側顯示一個圖標,圖標可以使用一個指定的圖片文件來創建。javax.swing.ImageIcon類實現了Icon接口,ImageIcon類的主要構造方法說明如下:
public ImageIcon()
該方法創建一個未初始化的圖像圖標。
public ImageIcon(byte[] imageData)
該方法從包含支持的圖像格式(如GIF、JPEG、PNG)的圖像文件讀取的字節數組中創建圖像圖標。
public ImageIcon(String filename, String description)
該方法從指定的文件創建圖像圖標。
public ImageIcon(URL location)
該方法從指定的URL創建圖像圖標。
案例1:創建一個窗體,在窗體中添加一個帶圖標和文字的標籤組件。
在demo包內創建JFrameTest2類。代碼如下:
packagedemo;import java.awt.Font;import javax.swing.Icon;import javax.swing.ImageIcon;* @ClassName: JFrameTest2* @Description: Swing程序設計(標籤組件與圖標)案例1publicclass JFrameTest2 { JFrame frame = new JFrame("圖片標籤示例程序"); // 創建一個標籤組件 JLabel label = new JLabel("這是一個帶圖片的標籤"); // 設置標籤文本的內容居中顯示 label.setHorizontalAlignment(SwingConstants.CENTER); // 設置標籤文本的字體和字號 Font font = new Font("宋體", Font.PLAIN, 25); label.setFont(font); // 設置標籤組件的圖標 Icon icon = new ImageIcon("./img/favorite.png"); label.setIcon(icon); // 將label組件添加到容器 frame.add(label);
在JFrameTest2程序中,使用ImageIcon類來加載favorite.png圖片文件,favorite.png圖片文件在PCoreUnit13項目的img目錄下,圖片加載成功後,調用label對象的setIcon()方法設置ImageIcon實例對象。
按鈕組件
按鈕組件允許用戶通過單擊來執行操作。按鈕組件即可以單獨顯示文本,也可以顯示文本和圖標,當按鈕被單擊時,它的外觀應該發生變化,看起來像是被按下,然後釋放。
按鈕組件由JButton類定義,JButton類的父類是Jcomponent類。JButton類定義了多個構造方法。
JButton類常用的構造方法說明如下:
public JButton()
該方法創建一個Jbutton按鈕,該實例沒有圖標,也沒有文字。
public JButton(Icon icon)
該方法創建一個帶圖標的按鈕。
public JButton(String text)
該方法創建一個帶文本的按鈕。
public JButton(String text, Icon icon)
該方法創建帶有初始文本和圖標的按鈕。
JButton類常用的方法說明如下:
該方法用於設置按鈕的圖標。
void setEnabled(boolean b)
該方法用於啟用(或禁用)按鈕,按鈕被禁用戶,不接收任何事件,按鈕顏色是灰色,表示在禁用狀態。參數b為true表示啟用按鈕,參數b為false表示禁用按鈕。
void doClick()
該方法模擬用戶單擊按鈕事件,以編程方式執行引發按鈕「單擊」事件。
void addActionListener(ActionListener l)
該方法添加動作監聽器到按鈕,用於接收發自此按鈕的動作事件。當用戶在此按鈕上按下或釋放滑鼠時,發生動作事件。如果 l 為 null,則不拋出任何異常,也不執行任何動作。
ActionListener是接收各類組件動作事件的監聽器接口。如果組件需要處理組件發出的動作事件,需要新建一個類來實現此接口,當組件發生動作事件時,調用該對象的 actionPerformed方法來處理動作事件。
響應按鈕事件
如果程序需要處理按鈕的動作事件,需要調用addActionListener方法將實現ActionListener接口的類添加到按鈕對象,ActionListener接口的actionPerformed方法用於處理組件發出的動作事件,該方法需要傳入ActionEvent類的實例對象。