JavaSE-26 Swing

學習要點

  • 關於Swing
  • Swing容器組件
  • Swing佈局管理器
  • Swing組件
  • Swing菜單組件

 

關於Swing

  • Swing和AWT都是java開發圖形用戶界面的工具包。
  • AWT:早期Java版本中,使用AWT開發圖形用戶界面。AWT功能豐富,缺點是直接依賴操做系統。換句話說,AWT其實是利用操做系統提供的圖形庫和控件接口來實現的。因爲不一樣的操做系統提供的圖形庫和空間接口並不徹底相同,所以AWT開發圖形用戶界面可移植性差。重量級AWT。
  • Swing:基於AWT的可移植性和功能限制的問題,Java在AWT的基礎上從新開發了Swing開發工具包。是一種輕量級的組件純Java開發。位於javax.swing包下。輕量級Swing。
  • Swing主要內容
  1. 容器:包含Swing組件
  2. 組件:與用戶交互的圖形對象
  3. 可改變的外觀:能夠經過修改代碼改變圖像界面風格
  4. Java2D圖形繪製:使用Java2D繪製圖形
  • Swing特徵
  1. 徹底由java實現
  2. 組件在不一樣平臺上表現一致
  3. 容許經過編程改變組件外觀
  4. 易於擴展,容易實現自定義組件
  5. Swing組件相關類名通常以J開頭

 

  • Swing的結構

圖1.1java

 

圖1.2c++

 

  • Swing組件分類

分爲容器組件和經常使用功能組件。容器組件能夠容納其餘經常使用功能組件,而經常使用功能組件中不能放置其餘組件。編程

 

Swing容器組件

JFrame組件

  • 概念

JFrame是一個包含標題和邊框的頂層窗口,是java.awt.Frame的擴展版本。數組

  • JFrame的構造方法。

構造方法框架

說    eclipse

JFrame()jsp

構造一個初始時不可見的新窗體ide

JFrame(String title)工具

建立一個新的、初始不可見的、具備指定標題的 Frame佈局

須要顯示窗體:setVisible(true)方法

  • 經常使用方法

經常使用方法

說明

JRootPane getRootPane()

返回此窗體的 rootPane 對象

Component add(Component comp)

將指定組件添加到容器

void remove(Component comp)

今後容器中移除指定組件

void pack()

調整此窗口的大小,以適合其子組件的首選大小和佈局

void setSize(int width,int height)

調整組件大小,使其寬度爲width,高度爲height

Dimension getSize()

返回窗體大小

JRootPane 的結構參見JDK API

  • 示例代碼:建立窗體,添加三個按鈕
public class TestJFrame {

    static JFrame winForm = new JFrame("測試窗體");

    public static void main(String[] args) {

        try {          

// 獲取系統風格

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

// 將系統風格應用於窗體           

SwingUtilities.updateComponentTreeUI(winForm);

        } catch (Exception e) {

            e.printStackTrace();

        }

        winForm.setSize(500, 300);// 設置窗體大小

        winForm.setLocationRelativeTo(null);// 窗體顯示器居中顯示

        FlowLayout flow = new FlowLayout();// 實例化佈局管理器

        winForm.getContentPane().setLayout(flow);// 將佈局管理器加入窗體

        JButton btn1 = new JButton("按鈕1");// 實例化按鈕

        JButton btn2 = new JButton("按鈕2");

        JButton btn3 = new JButton("按鈕3");

        winForm.getContentPane().add(btn1);// 添加按鈕到窗體

        winForm.getContentPane().add(btn2);

        winForm.getContentPane().add(btn3);

        winForm.setVisible(true);// 窗體可見

    }

}
  • 輸出效果

 

注意:

  • Swing組件不能直接添加到頂層容器中,它必須添加到一個與Swing頂層容器相關聯的內容面板(ConentPane)上,內容面板是一箇中間容器。
  • 在JFrame頂層容器中添加Swing組件有兩種方式:
  1. 得到頂層容器內容面板再添加組件:frame. getContentPane().add(組件對象)
  2. 創建相似JPanel中間容器,把組件添加到中間容器,而後再使用1的方法或者setContentPane()方法把中間容器添加到頂層容器中
  3. 通常頂層容器添加中間容器或者swing組件以前,經過getContentPane().setLayout()方法添加布局管理器

 

 

JPanel組件

  • 概念

JPanel是輕量級容器,它能夠用來容納其餘的界面組件(窗體除外),且默認的佈局管理器是FlowLayout。

 

  • 經常使用構造方法

構造方法

   

JPanel()

以默認佈局FlowLayout建立一個新面板

JPanel(LayoutManager layout)

以指定的佈局管理器建立一個新面板

 

  • 經常使用方法

經常使用方法

   

void add(Component comp)

將指定界面組件添加到面板

void remove(Component comp)

從該面板中移除指定組件

void setLayout(LayoutManager layout)

設置面板的佈局管理器

 

  • 示例代碼:建立窗體,添加三個按鈕
public static void main(String[] args) {

        JFrame winForm = new JFrame("JPanel測試");// 建立窗體

        winForm.setSize(400, 300);// 設置窗體大小

        winForm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 關閉按鈕

        FlowLayout flow = new FlowLayout();// 佈局管理器

        winForm.getContentPane().setLayout(flow);

        JPanel jp = new JPanel();// 建立JPanel對象

        JButton btn1 = new JButton("按鈕1");// 建立按鈕

        JButton btn2 = new JButton("按鈕2");

        JButton btn3 = new JButton("按鈕3");

        jp.setBackground(Color.GRAY);// 設定JPnel背景顏色

        jp.add(btn1);// Jpanel對象添加按鈕

        jp.add(btn2);

        jp.add(btn3);

        winForm.getContentPane().add(jp);// Jpanel對象添加到窗體

        winForm.setVisible(true);

    }

  

 

  • 輸出效果

 

 

 

 

JScrollPane組件

  • 概念

JScrollPane是一個可滾動的視圖面板。它包括JScrollBar和JViewPort。

JScrollBar:水平或垂直的滾動對象,可選。

JViewPort:顯示數據的窗口對象(例如圖像文件)。

 

  • 經常使用構造方法

構造方法

說    明

JScrollPane()

建立一個空的JScrollPane(沒有視圖區),其中水平和垂直滾動條在須要的時候出現。

JScrollPane(Component view)

建立一個顯示指定組件內容的JScrollpane,其中水平和垂直滾動條在組件內容大於視圖範圍時出現。

  • 經常使用方法

經常使用方法

   

JViewport getViewport()

返回當前JViewport對象

void setHorizontalScrollBarPolicy(int policy)

肯定水平滾動條什麼時候顯示在滾動窗格上

void setVerticalScrollBarPolicy(int policy)

肯定垂直滾動條什麼時候顯示在滾動窗格上

  • 示例代碼

    

public static void main(String[] args) {

        JFrame jf = new JFrame("帶滾動條的視圖面板");

        try {

            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());// 獲取系統風格

            SwingUtilities.updateComponentTreeUI(jf);// 將系統風格應用於窗體

        } catch (Exception e) {

            e.printStackTrace();

        }

        jf.setSize(400, 300);// 設置窗體大小

        jf.setLocationRelativeTo(null);// 窗體顯示器居中顯示

        FlowLayout flow = new FlowLayout();// 窗體設置佈局管理器

        jf.getContentPane().setLayout(flow);

        JScrollPane jspImage = new JScrollPane();// 建立JScrollPane對象

        Dimension ds = new Dimension(350, 250); // 封裝組件的高度和寬度

        jspImage.setPreferredSize(ds);// 設置JScrollPane的高度和寬度

        JLabel jlImage = new JLabel();// 建立放置圖像的JLabel標籤

        ImageIcon image = new ImageIcon("E:\\Dev\\J-eclipse\\SwingDemo\\src\\com\\etc\\swing\\demo2\\auto.jpg");// 建立圖片對象

        jlImage.setIcon(image);// 圖像放入JLabel標籤

        jspImage.setViewportView(jlImage);// 把標籤添加到JScrollPane中

        jspImage.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);// 設置垂直滾動條可見性

        jspImage.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); // 設置水平滾動條可見性

        jf.add(jspImage);// JScrollPane添加到窗體中

        jf.setVisible(true);// 窗體可見

    } 

輸出效果:

注意:JScrollPane默認使用ScrollPaneLayout佈局,不能更改其佈局。

 

 

Swing佈局管理器

定義

  • 每一個容器組件都有一個佈局管理器,當容器須要對某個組件進行定位或判斷其大小尺寸時,就會調用其對應的佈局管理器。
  • 當一個窗口中的組件較多時,界面應該簡潔整齊,佈局合理。Java採用佈局管理器對容器中的組件進行相對佈局,當改變容器大小時,或者改變組件的大小,或者改變組件之間的相對位置,保證組件不會被覆蓋而且容器沒有空白區域。
  • Java提供多種風格和特色的佈局管理器,每一種佈局管理器指定一種組件之間的相對位置。Java.awt中的佈局管理器類主要有:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBayLayout。 他們實現了佈局管理器LayoutManager接口。
  • 佈局是容器類的特性,每種容器都有一中默認佈局。Window窗口類的默認佈局管理器是BorderLayout,Panel面板類的默認佈局是FlowLayout。若是一個容器須要改變其默認佈局管理器,能夠調用Container容器類的FlowLayout()方法。
  • 容器管理器的指定:容器對象.setLayout(new xLayout) 。x指具體佈局管理器。

  

 

FlowLayout管理器

  • 流式佈局特色

 

1)        組件自左向右,自上向下佈局。

2)        遇到障礙折回,自動換行顯示。

3)        能夠設置每一行組件的對齊方式,默認居中對齊。

4)        Panel的默認佈局管理器。

  • 經常使用構造方法

構造方法

   

FlowLayout()

使用默認的居中對齊方式,水平和垂直間距爲默認值。

FlowLayout (int align)

使用指定對齊方式,水平和垂直間距爲默認值。參數值爲:LEFT、RIGHT、CENTER。

FlowLayout (int align,

int hgap,int vgap)

使用指定的對齊方式,指定水平間距、垂直間距。

  • 示例代碼
JFrame jf=new JFrame("流式佈局測試");

jf.setLayout(new FlowLayout());//如何居右顯示?

for(int i=1;i<=6;i++){

   jf.add(new JButton("按鈕"+i));

}

jf.setSize(200, 200);

jf.setVisible(true);

  

 

BorderLayout管理器

  • 邊界佈局特色

 

1)        按照地理方位佈局:上北下南左西右東+中間

2)        Window、Frame、Dialog的默認佈局管理器

3)        組件須要明確指定添加到邊界佈局的位置

  • 經常使用構造方法

構造方法

   

BorderLayout()

構造一個組件之間沒有間距的邊界佈局。

BorderLayout (int hgap,int vgap)

構造一個具備指定組件間距的邊界佈局。水平間距由 hgap 指定,垂直間距由 vgap 指定。

  • 添加組件到指定區域經常使用值:
     add(new Button("North"), BorderLayout.NORTH);//上

     add(new Button("South"), BorderLayout.SOUTH);//下

     add(new Button("East"), BorderLayout.EAST);//右

     add(new Button("West"), BorderLayout.WEST);//左

     add(new Button("Center"), BorderLayout.CENTER);//中間

  

  • 示例代碼
JFrame jf = new JFrame("邊界佈局測試");

jf.setLayout(new BorderLayout());

jf.add(new JButton("North"), BorderLayout.NORTH);

jf.add(new JButton("South"), BorderLayout.SOUTH);

jf.add(new JButton("East"), BorderLayout.EAST);

jf.add(new JButton("West"), BorderLayout.WEST);

jf.add(new JButton("Center"), BorderLayout.CENTER);

jf.setSize(200, 200);

jf.setVisible(true);

  

 

GridLayout管理器

  • 網格佈局特色

 

1)        網格形式。

2)        默認從左到右,從上到下添加組件。

3)        容器中每一個組件佔用大小徹底相同的一個區域。

4)        各個組件的大小由所在區域決定,組件自動長大到區域大小。

  • 經常使用構造方法

構造方法

   

GridLayout()

建立具備默認值的網格佈局,即每一個組件佔據一行一列。

GridLayout(int rows, int cols)

建立具備指定行數和列數的網格佈局。

GridLayout(int rows, int cols, int hgap, int vgap)

建立具備指定行數和列數的網格佈局。組件之間的距離由hgap和vgap肯定。

  • 示例代碼
JFrame jf = new JFrame("網格佈局測試");

    jf.setLayout(new GridLayout(3,4));

    for(int i=1;i<=12;i++){

        jf.add(new JButton("按鈕"+i));

    }

    jf.setSize(200, 200);

    jf.setVisible(true);

  

 

上機練習:製做計算器面板

 

提示:

一、JFrame默認佈局爲邊界佈局。

二、輸入框爲JTextField文本框組件,放在JFrame上部。

三、計算器按鈕放在JPanel組件中,JPanel組件採用網格佈局。

 

 

 

 

 

 

CardLayout管理器

  • 卡片佈局特色

組件的疊放形式,一堆組件放在容器中,每次只有最上面的組件課件

以時間方式管理組件而非按照空間方式管理

  • 經常使用構造方法

構造方法

   

CardLayout()

建立具備默認值的卡片佈局。

CardLayout(int hgap,

int vgap)

建立具備指定行間距和列間距的卡片佈局。

  • 控制組件經常使用方法

構造方法

   

void first(Container)

顯示第一個加入到CardLayout的卡片。

void last(Container)

顯示最後一個加入到CardLayout的卡片。

void next(Container)

顯示當前組件的下一個卡片。

void previous(Container)

顯示當前組件的前一個卡片。

show(Container,String)

在卡片父級容器中顯示指定名字的卡片。

  • 示例代碼 
public static void main(String[] args) {

       JFrame jf = new JFrame("卡片佈局測試");// 建立測試窗口

       try {           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());// 獲取系統風格

           SwingUtilities.updateComponentTreeUI(jf);// 將系統風格應用於窗體

       } catch (Exception e) {

           e.printStackTrace();

       }

       // 建立一個面板視圖,用於存放按鈕

       JPanel menuJP = new JPanel();

       menuJP.setLayout(new FlowLayout(FlowLayout.LEFT));// 流式佈局,居左顯示

       JButton btnOne = new JButton("第一個選項卡");

       JButton btnTwo = new JButton("第二個選項卡");

       menuJP.add(btnOne);

       menuJP.add(btnTwo);

       jf.add(menuJP, BorderLayout.NORTH);// 按鈕面板添加到頂部

 

       // 建立一個父級面板,用於存放卡片面板

       final JPanel jpMain = new JPanel();

       final CardLayout cardLayout = new CardLayout();

       jpMain.setLayout(cardLayout);

       jf.add(jpMain, BorderLayout.CENTER);// 把父級面板放入窗體

 

       // 建立兩個子級面板,顯示具體內容

       JPanel jp1 = new JPanel();

       JLabel jl1 = new JLabel("第一個選項卡頁面...");

       jl1.setForeground(Color.white);// 設置標籤組件文字顏色

       jp1.add(jl1);

       jp1.setBackground(Color.green);// 設置面板背景色爲綠色

       jpMain.add(jp1, "1");// 子級面板添加到父級面板中,指定名稱爲"1"

 

       JPanel jp2 = new JPanel();

       JLabel jl2 = new JLabel("第二個選項卡頁面...");

       jl2.setForeground(Color.white);// 設置標籤組件文字顏色

       jp2.add(jl2);

       jp2.setBackground(Color.red);// 設置面板背景色爲紅色

       jpMain.add(jp2, "2");// 子級面板添加到父級面板中,指定名稱爲"2"

       // 設置按鈕監聽事件

       class ActionListenerDemo implements ActionListener {

           @Override

           public void actionPerformed(ActionEvent e) {

               if (e.getActionCommand().equals("第一個選項卡")) {

                   cardLayout.show(jpMain, "1");// 在父級面板中顯示名稱爲"1"的子面板

               } else {

                   cardLayout.show(jpMain, "2");// 在父級面板中顯示名稱爲"2"的子面板

               }

           }

       }

       ActionListenerDemo ald = new ActionListenerDemo();// 實例化監聽

       btnOne.addActionListener(ald);// 註冊事件監聽

       btnTwo.addActionListener(ald);// 註冊事件監聽

       jf.setSize(500, 300);// 設置窗體大小

       jf.setLocationRelativeTo(null);// 窗體顯示器居中顯示

       jf.setVisible(true);// 窗體可見

   }

  運行效果

 

 

上機練習:按照示例,完成卡片佈局

 

 

其餘佈局管理器

  • Java推薦用戶在排版組件的時候使用佈局管理器,但不是強制要求使用佈局管理器。
  • NULL佈局管理器:若是用戶須要自定義精肯定位組件,使用NULL佈局管理器。也稱爲空佈局管理器,由用戶自定義組件位置。
  • GridBagLayout佈局管理器:功能最強大,最複雜的佈局管理器。組件能夠跨越網格、獨立設置各個網格的大小等等。相似表格單元格的跨行跨列特性。

  

使用Swing插件可視化佈局組件

eclipse進行swing可視化開發插件

 

 

Visual Editor

Eclipse官方提供。

SWT-Designer

功能強大,收費。

jigloo

收費。non_commercial版本免費,功能和收費版本同樣。

MyEclipse10.6可視化開發

  • MyEclipse提供了可視化插件Swing Matisse。
  • 使用步驟

1)        項目包右鍵,new,other,myeclipse:

2)        填寫Matisse Form相關信息並選擇模板

 

 

 

Swing組件

Swing GUI組件

上圖圖包含組件:

  • JLabel
  • JTextField
  • JComboBox
  • JCheckBox
  • JTextArea
  • JRadioButton
  • lJButton

 

JLabel

  • 概念

最簡單的swing組件之一,用於在框架上顯示標籤。

標籤能夠顯示文本,也能夠顯示圖像。

不可交互,不響應任何輸入事件,不能得到鍵盤和鼠標的響應。

  • 經常使用構造方法

構造方法

   

JLabel()

建立無圖像而且其標題爲空字符串的 JLabel

JLabel(Icon image)

建立具備指定圖像的 JLabel 實例。image通常使用ImageIcon(String filename)構建。

JLabel(String text)

建立具備指定文本的 JLabel 實例

 

  • 經常使用方法

經常使用方法

   

getText()

返回標籤顯示的文本字符串

setText(String text)

定義此組件將要顯示的單行文本

setIcon(Icon icon)

定義標籤將顯示的圖標

  • 規範

在建立JLabel對象的時候,通常建議添加lbl前綴,把代碼規範變成本身的編碼習慣。

  • 示例代碼

  

 JFrame jf = new JFrame("JLabel測試");

    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    jf.getContentPane().setLayout(new FlowLayout());

    // JLabel的三種構造方法

    JLabel lbl1 = new JLabel();

    JLabel lbl2 = new JLabel("Label2");

    JLabel lbl3 = new JLabel(new ImageIcon("圖片url地址"));

    jf.add(lbl1);

    jf.add(lbl2);

    jf.add(lbl3);

    jf.setSize(300, 200);

    jf.setVisible(true);

  

 

JTextField

  • 概念

swing中的文本框組件,提供輸入和編輯單行文本。

  • 經常使用構造方法

構造方法

   

JTextField()

構造一個新的 TextField

JTextField(String text)

構造一個用指定文本初始化新的 TextField

 

  • 經常使用方法

經常使用方法

   

getText()

返回文本框中的文本字符串

setHorizontalAlignment(int alignment)

設置文本的水平對齊方式

 

  • 編碼規範

JTextField對象名前面加txt。

  • 示例代碼
package com.etc.coponment;

 

import java.awt.*;

import javax.swing.*;

 

public class JTextFieldT {

  

   static JFrame aWindow=new JFrame("JTextField Test");

   static JTextField txtT1=null;

   static JTextField txtT2=null;

   public static void main(String[] args) {

       aWindow.setSize(400, 150);

       aWindow.setDefaultCloseOperation(JFrame

               .EXIT_ON_CLOSE);       

       FlowLayout flow=new FlowLayout();

       aWindow.getContentPane().setLayout(flow);

       //演示其2種構造方法

       txtT1=new JTextField();

       txtT2=new JTextField("JTextField");

      

       aWindow.getContentPane().add(txtT1);

       aWindow.getContentPane().add(txtT2);

       //此方法用來演示JTextField的經常使用方法

       setTxtT1Pro();

       aWindow.setVisible(true);

   }

   public static void setTxtT1Pro(){

       System.out.println(txtT2.getText());

       txtT2.setHorizontalAlignment(JTextField.LEFT);

       //經常使用參數:JTextField.LEFT、JTextField.CENTER 和 JTextField.RIGHT

   }

}

  

JTextArea

  • 概念

JTextArea組件從用戶接收多行文本,並容許用戶編輯輸入的文本。

  • 經常使用構造方法

構造方法

   

JTextArea()

構造一個新的多行文本區

JTextArea(String text)

構造一個用指定文本初始化新的多行文本區

 

  • 經常使用方法

經常使用方法

   

getText()

返回文本區中的文本字符串

setFont(Font f)

設置文本區的字體

 

  • 編碼規範

JTextArea對象名前面加txa。

  • 示例代碼
package com.etc.coponment;

 

import java.awt.*;

import javax.swing.*;

 

public class JTextAreaT {

   static JFrame aWindow=new JFrame("JTextArea Test");

   static JTextArea txaT1=null;

   static JTextArea txaT2=null;

   public static void main(String[] args) {

       aWindow.setSize(400, 150);

       aWindow.setDefaultCloseOperation(JFrame

               .EXIT_ON_CLOSE);       

       FlowLayout flow=new FlowLayout();

       aWindow.getContentPane().setLayout(flow);

       //演示其2種構造方法

       txaT1=new JTextArea();

       txaT2=new JTextArea("JTextArea");

      

       aWindow.getContentPane().add(txaT1);

       aWindow.getContentPane().add(txaT2);

       //此方法用來演示經常使用方法

       setPro();

       aWindow.setVisible(true);

   }

   public static void setPro(){

       System.out.println(txaT2.getText());

       txaT2.setFont(new Font(txaT2.getText(),Font.ITALIC,24));

   } 

}

  

 

JButton

  • 概念

JButton用來建立圖形用戶界面上的按鈕。經過給JButton註冊監聽事件,當按鈕的一個點擊事件觸發時,就會執行相應的動做。

  • 經常使用構造方法

構造方法

   

JButton()

建立不帶文本或圖標的按鈕

JButton(Icon icon)

建立一個帶圖標的按鈕

JButton(String text)

建立一個帶文本的按鈕

JButton(String text, Icon icon)

建立一個帶初始文本和圖標的按鈕

  • 經常使用方法

經常使用方法

   

void setRolloverIcon(Icon rolloverIcon)

鼠標通過時顯示的圖標

void setPressedIcon(Icon pressedIcon)

點擊按鈕時顯示的圖表

  • 編碼規範

JButton對象名前面加btn。

  • 示例代碼
package com.etc.coponment;

 

import java.awt.*;

import javax.swing.*;

 

public class JButtonT {

   static JFrame aWindow=new JFrame("JTextArea Test");

   static JButton btnT1=null;

   static JButton btnT2=null;

   static JButton btnT3=null;

   static JButton btnT4=null;

   public static void main(String[] args) {

       aWindow.setSize(500, 250);

       aWindow.setDefaultCloseOperation(JFrame

               .EXIT_ON_CLOSE);       

       FlowLayout flow=new FlowLayout();

       aWindow.getContentPane().setLayout(flow);

       //演示其4種構造方法

       btnT1=new JButton();

       btnT2=new JButton("JTextArea");

       btnT3=new JButton(new javax.swing.ImageIcon(

       "D:\\Program Files\\HyperSnap6\\tmp\\圖0120.JPG"));

       btnT4=new JButton("JTextArea",new javax.swing.ImageIcon(

       "D:\\Program Files\\HyperSnap6\\tmp\\圖0120.JPG"));

      

       aWindow.getContentPane().add(btnT1);

       aWindow.getContentPane().add(btnT2);

       aWindow.getContentPane().add(btnT3);

       aWindow.getContentPane().add(btnT4);

      

       //此方法用來演示經常使用方法

       setPro();

       aWindow.setVisible(true);

   }

   public static void setPro(){

       btnT1.setIcon(new javax.swing.ImageIcon(

       "D:\\Program Files\\HyperSnap6\\tmp\\圖0122.JPG"));

       btnT1.setRolloverIcon(new javax.swing.ImageIcon(

       "D:\\Program Files\\HyperSnap6\\tmp\\圖0121.JPG"));

       btnT1.setPressedIcon(new javax.swing.ImageIcon(

       "D:\\Program Files\\HyperSnap6\\tmp\\圖0120.JPG"));

       btnT3.setPressedIcon(new javax.swing.ImageIcon(

       "D:\\Program Files\\HyperSnap6\\tmp\\圖0120.JPG"));

   }

}

  

 

JCheckBox

  • 概念

建立可供用戶多選的複選框,能夠選擇也能夠取消,並顯示所選擇狀態。

  • 經常使用構造方法

構造方法

   

JCheckBox()

建立一個沒有文本、沒有圖標而且最初未被選定的複選框

JCheckBox(Icon icon)

建立有一個圖標、最初未被選定的複選框

JCheckBox(Icon icon,

boolean selected)

建立一個帶圖標的複選框,並指定其最初是否處於選定狀態

JCheckBox(String text)

建立一個帶文本的、最初未被選定的複選框

JCheckBox(String text,

boolean selected)

建立一個帶文本的複選框,並指定其最初是否處於選定狀態

  • 經常使用方法

經常使用方法

   

Icon getIcon()

返回默認圖標

String getText()

返回JCheckBox對象的文本

void setVerticalAlignment(int

 alignment)

設置圖標和文本的垂直對齊方式

int getVerticalAlignment()

返回文本和圖標的垂直對齊方式

void setEnabled(boolean b)

啓用或者禁用JCheckBox對象

void setText(String text)

設置JCheckBox對象的文本

boolean isSelected()

返回按鈕的選擇狀態

  • 編碼規範

JCheckBox對象名前面加chk。

  • 示例代碼
package com.etc.coponment;

 

import java.awt.*;

import javax.swing.*;

 

public class JCheckBoxT {

 

   static JFrame aWindow=new JFrame("JTextArea Test");

   static JCheckBox chkT1=null;

   static JCheckBox chkT2=null;

   public static void main(String[] args) {

       aWindow.setSize(500, 250);

       aWindow.setDefaultCloseOperation(JFrame

               .EXIT_ON_CLOSE);       

       FlowLayout flow=new FlowLayout();

       aWindow.getContentPane().setLayout(flow);

       //演示其2種構造方法

       chkT1=new JCheckBox("JCheckBox");

       chkT2=new JCheckBox("JCheckBox",new javax.swing.ImageIcon(

       "D:\\Program Files\\HyperSnap6\\tmp\\圖0122.JPG"),true);

       aWindow.getContentPane().add(chkT1);

       aWindow.getContentPane().add(chkT2);

      

      

       //此方法用來演示經常使用方法

       setPro();

       aWindow.setVisible(true);

   }

   public static void setPro(){

       chkT2.setVerticalAlignment(SwingConstants.BOTTOM);

       System.out.println(chkT1.getIcon());

       System.out.println(chkT1.getText());

       System.out.println(chkT2.getVerticalAlignment());

   }

}

  

 

JRadioButton

  • 概念

建立單選按鈕的組件。一般多個JRadioButton對象和一個ButtonGroup對象一塊兒使用。

  • 經常使用構造方法

構造方法

   

JRadioButton()

建立初始非選中的按鈕,不設置文本

JRadioButton(String  text)

用指定文本建立非選中按鈕

JRadioButton(String text,

boolean selected)

用指定文本和選中狀態建立按鈕

  • 經常使用方法

經常使用方法

   

Icon getIcon()

返回默認圖標。沒有圖標返回null

String getText()

返回JRadioButton對象文本

void setEnabled(Boolean b)

啓用或者禁用JRadioButton對象

void setText(String text)

設置JRadioButton對象文本

boolean isSelected()

返回按鈕選擇狀態

  • 編碼規範

JRadioButton對象名前面加rad。

  • 示例代碼
package com.etc.coponment;

 

import java.awt.*;

import java.util.*;

import javax.swing.*;

 

public class JRadioButtonT {

   static JFrame aWindow=new JFrame("JTextArea Test");

   static JRadioButton radT1=null;

   static JRadioButton radT2=null;

   static JRadioButton radT3=null;

   public static void main(String[] args) {

       aWindow.setSize(500, 250);

       aWindow.setDefaultCloseOperation(JFrame

               .EXIT_ON_CLOSE);       

       FlowLayout flow=new FlowLayout();

       aWindow.getContentPane().setLayout(flow);

       //演示其3種構造方法

       radT1=new JRadioButton();

       radT2=new JRadioButton("男");

       radT3=new JRadioButton("男",true);

       aWindow.getContentPane().add(radT1);

       aWindow.getContentPane().add(radT2);

       aWindow.getContentPane().add(radT3);

      

       //此方法用來演示經常使用方法

       setPro();

       aWindow.setVisible(true);

   }

   public static void setPro(){

       System.out.println(radT1.getIcon());

       System.out.println(radT2.getText());

       radT3.setEnabled(false);

       System.out.println(radT3.isSelected());

   }

}

  

 

JComboBox

  • 概念

建立可供用戶選擇的下拉框。可編輯狀態下可接收文本。

  • 經常使用構造方法

構造方法

   

JComboBox()

建立一個不包含選擇項的下拉框對象

JComboBox(Object[] items)

建立一個包含指定數組中元素的下拉框對象

JComboBox(Vector<?> items)

建立一個包含指定Vector中元素的下拉框對象

  • 經常使用方法

經常使用方法

   

addItem(Object obj)

將列表項添加到下拉框中

getItemAt(int index)

返回指定索引位置的列表項。列表項索引從0開始。

getItemCount()

返回列表項最大數目

getSelectedItem()

返回當前選擇的列表項

getSelectedIndex()

返回當前選擇的索引

  • 編碼規範

JComboBox對象名前面加cbo。

  • 示例代碼
package com.etc.coponment;

 

import java.awt.*;

import javax.swing.*;

import java.util.*;

public class JComboBoxT {

 

   static JFrame aWindow=new JFrame("JTextArea Test");

   static JComboBox cboT1=null;

   static JComboBox cboT2=null;

   static JComboBox cboT3=null;

   static JComboBox cboT4=null;

   static JLabel lbl1=null;

   public static void main(String[] args) {

       aWindow.setSize(500, 250);

       aWindow.setDefaultCloseOperation(JFrame

               .EXIT_ON_CLOSE);       

       FlowLayout flow=new FlowLayout();

       aWindow.getContentPane().setLayout(flow);

       Vector vec=new Vector();

       vec.add("選項一");

       vec.add("選項二");

       //演示其4種構造方法

       cboT1=new JComboBox();

       cboT2=new JComboBox(new String[]{"選項一","選項二"});

       cboT3=new JComboBox(vec);

       cboT4=new JComboBox(JComboBoxItem.addItem());

       lbl1=new JLabel();

       aWindow.getContentPane().add(cboT1);

       aWindow.getContentPane().add(cboT2);

       aWindow.getContentPane().add(cboT3);

       aWindow.getContentPane().add(cboT4);

       aWindow.getContentPane().add(lbl1);

      

       //此方法用來演示經常使用方法

       setPro();

       aWindow.setVisible(true);

   }

   public static void setPro(){

       cboT2.addItem(new String("選項三"));

       System.out.println(cboT2.getItemAt(2));

       System.out.println(cboT2.getItemCount());

       System.out.println(cboT2.getSelectedItem());

       System.out.println(cboT2.getSelectedIndex());

       cboT4.addItemListener(new java.awt.event.ItemListener() {

           public void itemStateChanged(java.awt.event.ItemEvent evt) {

               changed(evt);

           }

       });

   }

   private static void changed(java.awt.event.ItemEvent evt) {

       // TODO add your handling code here:

       if(cboT4.getSelectedItem().toString().indexOf("圖0132.JPG")>-1)

           lbl1.setText("您選擇的是測試圖標");

       else

           lbl1.setText("您選擇的是運行圖標");

   }

}

 

 

package com.etc.coponment;

import javax.swing.*;

import java.awt.*;

public class JComboBoxItem {

   public static ComboBoxModel addItem(){

       DefaultComboBoxModel cbom=new DefaultComboBoxModel();

       cbom.addElement(new ImageIcon("E:\\tmp\\圖0132.JPG"));

       cbom.addElement(new ImageIcon("E:\\tmp\\圖0133.JPG"));

       return cbom;

   }

}

  

上機練習:JComboBox

需求描述:

在JComboBox列出一些國家名稱。每當用戶在選擇一個國家的時候,將該國的國旗做爲標籤顯示,並在JTextArea中顯示該國的介紹。

完成時間:20分鐘。

 

上機練習:添加學生信息窗體制做

需求描述:

設計和完成學生信息添加窗體的製做。

要求必要的驗證

完成時間:30分鐘。

  

JTable

  • 概念

JTable是一個表格控件,它容許開發人員經過一個表格模型來組織和顯示數據,並且經過相應的設置能夠編輯表格中的數據。

  • 構造方法

構造方法

   

JTable()

構造一個默認的 JTable,使用默認的數據模型、默認的列模型和默認的選擇模型對其進行初始化。

JTable(int numRows, int numColumns)

使用 DefaultTableModel 構造具備 numRows 行和 numColumns 列個空單元格的 JTable。

JTable(Object[][] rowData,

Object[] columnNames)

構造一個 JTable 來顯示二維數組 rowData 中的值,其列名稱爲 columnNames。

JTable(TableModel dm)

構造一個 JTable,使用數據模型 dm、默認的列模型和默認的選擇模型對其進行初始化。

JTable(Vector rowData,

Vector columnNames)

構造一個 JTable 來顯示 Vector 所組成的 Vector rowData 中的值,其列名稱爲 columnNames。

 

  • 經常使用方法

方法

   

void addColumn(TableColumn aColumn)

將 aColumn 追加到此 JTable 的列模型所保持的列數組的尾部。

void columnAtPoint(Point point)

返回 point 所在的列索引;若是結果不在 [0, getColumnCount()-1] 範圍內,則返回 -1。

int getColumnCount()

返回列模型中的列數。

String getColumnName(int column)

返回出如今視圖中 column 列位置處的列名稱。

int getSelectedRowCount()

返回選定行數。

int rowAtPoint(Point point)

返回 point 所在的行索引;若是結果不在 [0, getRowCount()-1] 範圍內,則返回 -1。

Object getValueAt(int row, int column)

返回 row 和 column 位置的單元格值。

獲取單元格的值示例:

Object selected = jTable1.getModel().getValueAt(

                    jTable1.getSelectedRow(),jTable1.getSelectedColumn());

  

  • 編碼規範

JTable對象名前加tbl

  • 示例

JTable對象不能直接添加到JFrame中,須要先添加到JScrollPane中,再把JscrollPane添加到JFrame中。

經過Matisse建立表格對象。

  • 代碼示例:
package com.etc.demo;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTable;

public class JTableTest {

   JFrame jf = new JFrame("簡單表格");

   JTable jt = null;

   // 表格數據

   Object[][] tableData = { new Object[] { "Java", "23%", "持平" },

           new Object[] { "Python", "21%", "上升" },

           new Object[] { "c", "19%", "持平" },

           new Object[] { "c++", "20%", "持平" },

           new Object[] { "PHP", "18%", "上升" } };

   // 表頭

   Object[] columnTitle = { "語言", "佔用比率", "趨勢" };

 

   public void init() {

       jt = new JTable(tableData, columnTitle);

       jf.add(new JScrollPane(jt));

       jf.pack();

       jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       jf.setVisible(true);

   }

   public static void main(String[] args) {

       new JTableTest().init();

   }

}

  

JTree

  • 概念

形象化展現分層數據的樹形組件。

根節點:上不包含節點,下包含節點。

枝節點:上下都包含節點。

葉節點:上包含節點,下不包含節點。

相似磁盤(根節點)、文件夾(枝節點)和文件(葉節點)的關係。

  • 構造方法

構造方法

   

JTree()

返回帶有示例模型的 JTree。

JTree(Hashtable<?,?> value)

返回從 Hashtable 建立的 JTree,它不顯示根。

JTree(Object[] value)

返回 JTree,指定數組的每一個元素做爲不被顯示的新根節點的子節點。

JTree(TreeNode root)

返回 JTree,指定的 TreeNode 做爲其根,它顯示根節點。

JTree(Vector<?> value)

返回 JTree,指定 Vector 的每一個元素做爲不被顯示的新根節點的子節點。

  • 經常使用方法

方法

   

void collapsePath(TreePath path)

確保指定路徑標識的節點是摺疊的,而且可查看。

void collapseRow(int row)

確保指定行中的節點是摺疊的。

void expandPath(TreePath path)

確保指定路徑標識的節點展開,而且可查看。

void expandRow(int row)

確保指定行中的節點展開,而且可查看。

TreePath getPathForRow(int row)

返回指定行的路徑。

int[] getSelectionRows()

返回全部當前選擇的行。

  • 編碼規範

JTree不能直接添加到JFrame對象中,須要先添加到JScrollPane中。使用JScrollPane的setViewportView(Jtree jt)添加。

  • 示例代碼
package com.etc.demo;

 

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTree;

import javax.swing.tree.DefaultMutableTreeNode;

import javax.swing.tree.DefaultTreeModel;

 

public class JTreeTest {

 

   JFrame f = new JFrame("樹形節點測試");

   JScrollPane jsp = new JScrollPane();

 

   public void init() {

       // 建立根節點

       DefaultMutableTreeNode root = new DefaultMutableTreeNode("根節點");

       // 建立枝節點

       DefaultMutableTreeNode parent = new DefaultMutableTreeNode("枝節點");

       // 建立葉節點

       DefaultMutableTreeNode leaf = new DefaultMutableTreeNode("葉節點");

       // 關聯節點

       parent.add(leaf);

       root.add(parent);

       // 添加到帶滾動條的面板中

       DefaultTreeModel dtm= new DefaultTreeModel(root);

       JTree jt = new JTree(dtm);

       jsp.setViewportView(jt);//屬性菜單添加到JScrollPane中

       f.add(jsp);

       f.pack();

       f.setLocationRelativeTo(null);

       f.setVisible(true);

   }

 

   public static void main(String[] args) {

       new JTreeTest().init();

   }

}

  

上機練習:公司組織結構樹形菜單

需求描述:

完成以下公司組織結構的樹形菜單開發。

 

完成時間:20分鐘。

 

 

Swing菜單組件

定義

窗體上的選項列表。做爲軟件功能或者任務的劃分,指明用戶的操做。

 

菜單的組成

JMenuBar:菜單欄的實現。 

JMenu:包含了JMenuItem的彈窗窗口。 

JMenuItem:菜單項的實現。當用戶選中他的時候就會執行相應的操做。

 

JMenuBar

 

  • 用來建立一個水平菜單欄。
  • 只能做爲組件添加到JFrame、JWindow或者JInternalFrame窗體中。
  • 須要javax.swing .SingleSelectionModel接口和javax.swing.LookAndFeel類來輔助工做。
  • javax.swing .SingleSelectionModel接口用於跟蹤當前選中的菜單。
  • javax.swing.LookAndFeel類負責繪製菜單欄,並對其中發生的事件作出響應。

 

JMenu

 

  • 繼承自JMenuItem,它是一個包含了JMenuItem的彈窗。用戶選擇JMenuBar上的菜單項時,會顯示該菜單項下的全部JMenuItem。
  • 當他添加到JMenuBar時,將顯示爲文本字符串。
  • 當用戶單擊此字符串時,則顯示一個彈出式菜單。
  • JMenu能夠包含如下菜單項:JMenuItem、JCheckBoxMenuItem、JRadioButtonMenuItem、JSeparator等。
  • 須要兩個附加類來輔助其工做:javax.swing.JPopupMenu類和javax.swing.LookAndFeel類。
  • javax.swing.JPopupMenu:彈出菜單的實現,彈出菜單是一個可彈出並顯示一系列選項的小窗口。
  • javax.swing.JPopupMenu:負責繪製菜單欄中的菜單,以及負責對發生在其中的事件作出響應。

 

JMenuItem

 

  • 菜單中的項的實現。菜單項本質上是位於列表中的按鈕。當用戶選擇「按鈕」時,則執行與菜單項關聯的操做。JPopupMenu 中包含的 JMenuItem 正好執行該功能。
  • JMenuItem一般是JMenu或JPopupMenu中選項的標題。

 

示例代碼

package com.etc.demo;

 

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

 

public class JMenuTest {

    JFrame jf = new JFrame("菜單欄測試");

    public void init() {

        // 建立菜單欄

        JMenuBar mnuBar = new JMenuBar();

        // 建立JMenu對象

        JMenu mnuFile = new JMenu();

        JMenu mnuEdit = new JMenu();

        JMenu mnuView = new JMenu();

        JMenu mnuHelp = new JMenu();

        // 建立JMenuItem對象

        JMenuItem mnuiNew = new JMenuItem();

        JMenuItem mnuiOpen = new JMenuItem();

        JMenuItem mnuiSave = new JMenuItem();

        JMenuItem mnuiSaveAs = new JMenuItem();

        JMenuItem mnuiExit = new JMenuItem();

        // 爲菜單項賦顯示值

        mnuFile.setText("文件");

        mnuEdit.setText("編輯");

        mnuView.setText("視圖");

        mnuHelp.setText("幫助");

 

        mnuiNew.setText("新建");

        mnuiOpen.setText("打開");

        mnuiSave.setText("保存");

        mnuiSaveAs.setText("另存爲");

        mnuiExit.setText("退出");

 

        // 關聯菜單項

        mnuBar.add(mnuFile);

        mnuBar.add(mnuEdit);

        mnuBar.add(mnuView);

        mnuBar.add(mnuHelp);

 

        mnuFile.add(mnuiNew);

        mnuFile.add(mnuiOpen);

        mnuFile.add(mnuiSave);

        mnuFile.add(mnuiSaveAs);

        mnuFile.add(mnuiExit);

 

        // 把菜單放入窗體中

        jf.setSize(300, 200);

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jf.setJMenuBar(mnuBar);

        jf.setVisible(true);

    }

 

    public static void main(String[] args) {

        new JMenuTest().init();

    }

}
相關文章
相關標籤/搜索