java-swing-基本組件

不亂於心,不困於情,不念過去,不懼將來

SWING

  • swing庫是AWT(Abstract Windowing Toolkit)的一個擴展,AWT是java 1.0爲支持圖形編程而提供的一個包。在功能方面,Swing在其前身的基礎上做了很多改進:新組件,擴展的組件特性,更好的時間處理功能和可選擇的外觀.
  • Swing組件不同於AWT,它是完全由java實現的,這使得它比AWT具有更好的跨平臺兼容性。
  • Swing的所有成員都是javax.swing包的一部分,使用swing,需要先用import導入上述包。
  • Swing能夠讓我們使用操作系統的風格或者新的風格來創建java程序的界面。

swing組件分類

  • 頂層容器:JFrame、JApplet、JDialog、JWindow共4個
  • 中間容器:JPanel、JScrollPane、JSplitPane、JToolBar
  • 基本控件: ImageIcon(圖標),JLabel(標籤),ITextField(文本框),JTextArea(文本區域),JScrollPane(可滾動窗格),JScrollBar(滾動條),ICheckBox(複選框),JRadioButton(單選按鈕),JComboBox(下拉式列表和組合框)。

1、JFrame,JDialog,JWindow與JApplet這四個組件我們統稱爲最上層(Top-Level)組件,因爲其餘的Swing組件都必須依附在此四組件之一上才能顯示出來。
2、最上層的四個組件都實現了RootPaneContainer接口,RootPaneContainer定義了各種容器取得與設置的方法,這裏的容器包括JRootPane,GlassPane,LayeredPane,和ContentPane.

JRootPane的組成結構,並非繼承結構:
          JRootPane
             --Glass Pane
             --Layered Pane
                --Content Pane
                --Menu Bar

3、JRootPane包含有GlassPane 與 Layered Pane,而Layered Pane又包含有ContentPane與Menu Bar,其中程序設計者可選擇是否使用MenuBar,若沒有使用Menu Bar,則ContentPane就會佔據整個版面。
4、GlassPane:它是一個透明的面版,主要功能是它或以捕獲JFrame上的任何事件。GlassPane的默認值是不可看見的,不過可以將它設爲看見的(visible),例如若要在GlassPane上做繪圖的工作,就可以在GlassPane上顯示出來!
5、四個上層組件類中都有一個默認容器爲rootPane,rootPane是JRootPane類型的,但JRootPane類型並不算是真實的容器,我們不能在JRootPane上加入任何的組件!要加必須加在LayeredPane或者是LayeredPane 裏的ContentPane上。
6、LayeredPane:它是一個可以重疊組件的面版,本身就是一個容器,可以將它看成是相當多層的置物架,每一層都可以放置物品,而且上面的物品會遮隹下面的物品。
7、ContentPane:是最重要的,且是最常到的容器。它是LayeredPane中的一層,一般視爲最底層。通常我們會將組件放在ContentPane上,而不會加在LayeredPane中,因爲若將組件加入LayeredPane中必須自選管理組件間層次的關係,這會加重程序維護的困難度。若將組件放入ContentPane,對於像工具欄(ToolBar),PopupMenu等組件,Java會自動高速其層次關係。

創建界面

  1. 要創建Swing應用程序,首先要創建一個表示圖形界面的類。這個類的對象將被用作容器,用於放置要顯示的其他組件。
  2. 在大多數情況下,主界面是一個簡單的窗口(JWindow)或者是一個叫做框架的界面(JFrame類)。
  3. 窗口(JWindow)是一個容器,可被顯示到用戶界面上。簡單窗口沒有標題欄,最大化,最小化,和關閉按鈕,也沒有圖形用戶界面操作系統的窗口中最常用的其他元素。包括這些創口管理特性的窗口被稱爲框架(JFrame)。

創建圖形swing應用程序的方式

  1. 把界面聲明爲JFrame或JWindow的子類
			class MyJframe extends JFrame{
			}
  1. 在該類的構造方式中調用父類的構造方法來處理其設置。JFame有兩個構造函數JFrame(),JFrame(String),後者字符串爲標題欄。
  2. 設置框架窗口的大小,單位爲像素,調用其setSize方法設置框架窗口的大小,單位爲像素,調用其setSize方法。
  3. 決定窗口關閉窗口時如何辦決定窗口關閉窗口時如何辦。每個框架的標題欄都有最大化,最小化,和關閉按鈕,在java中,當框架被關閉時,正常情況下是讓程序繼續執行這樣必須調用框架的方法setDefaultCloseOperation(),這個方法有四種參數:EXIT_ON_CLOSE:框架被關閉時退出程序;DISPOSE_ON_CLOSE:框架被關閉時,釋放框架對象並繼續運行應用程序;DO_NOTHING_ON_CLOSE:打開框架窗口並繼續運行程序;HIDE_ON_CLOSE:關閉框架窗口,並繼續運行程序。
  4. 顯示框架顯示框架 如果希望框架被創建後便顯示出來,可在構造方法中調用setVisible(true)或show()。
package SwingDemo;

import javax.swing.JFrame;

class MyJframe extends JFrame{
	/**通過該類可建立一個JFrame的框架
	 * 重載了構造函數,可選擇是否帶標題
	 */
	public MyJframe(String s,int len,int weight){
		   super(s);//標題
		   setSize(len,weight);//框架大小
		   setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);//關閉方式
		   setVisible(true);//創建時顯示
	}
	public MyJframe(int len,int weight){
		   super();
		   setSize(len,weight);
		   setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		   setVisible(true);
	}
}
public class swingDemo {
	public static void main(String[] args) {
		  MyJframe myJframe = new MyJframe("主界面",100, 100);
	}
}

運行結果
框架圖

  1. 當建立一個JFrame組件時,系統會爲此JFrame建立JRootPane組件,我們就可以任意地取得JRootPane上的GlassPane , Layered Pane或ContentPane,然後進行其它的操作。

swing組件

  1. 使用swing組件實際上是使用該組件的對象,我們可以通過調用構造方法來創建組件,然後調用相應的方法來正確的設置組件。
  2. 所有的swing組件都是抽象類JComponent的子類,後者包含用於設置組價大小,修改背景顏色,定義文本字體以及設置工具提示的方法。

創建組件其實就是創建該組件的對象,調用該組件的構造方法即可。

JButton btn1 = new JButton("這是一個按鈕");

使用組件

所有的swing組件都是抽象類JComponent的子類。所有的組件均從JComponent繼承了很多方法,常用方法有:

public void setSize(int width, int height)     //設置組件的大小
public Dimension getSize(Dimension rv)  //將此組件的寬度/高度存儲到“返回值”rv 。
public void setVisible(boolean b)               //設置組件是否可見
public void setEnabled(boolean enabled   //參數爲true,啓用組件,否則禁用組件
public void setForeground(Color fg)          //設置此組件的前景色
public void setFont(Font font)                  //設置此組件的字體。 

在舊版中,swing組件不能直接添加到頂層容器上,必須添加到一個與Swing頂層容器相關的內容面板(content pane)上才能被顯示到用戶界面。

            JFrame frame = new JFrame();
              Container contentPane =frame.getContentPane();//獲得frame的內容面板
             JButton button = new JButton();
             contentPane.add(button);將按鈕添加到內容面板上
             或者
               JFrame frame = new JFrame();
              JButton button = new JButton();
               JPanel panel = new JPanel();//新建一個面板
		      panel.add(button);//把按鈕添加到該面板上
	         frame.setContentPane(panel);//將上述面板設爲frame的內容面板

而新版本的JDK,直接在JFrame中可以調用add(組件)來添加組件,組件將被添加到contentPane。

          JFrame frame = new JFrame();
          JButton button = new JButton();
          frame.add(button);

按鈕

button的常用方法

public JButton()                    //創建不帶有設置文本或圖標的按鈕。 
public JButton(Icon icon)     //創建一個帶圖標的按鈕。 
public JButton(String text)  //創建一個帶文本的按鈕。 
public JButton(String text, Icon icon)//創建一個帶初始文本和圖標的按鈕。 
public void updateUI()     //根據當前外觀的值重置 UI 屬性。                     
package SwingDemo;

import javax.swing.JButton;
import javax.swing.JFrame;

class MyJframe extends JFrame{
	public MyJframe(String s,int len,int weight){
		   super(s);//標題
		   setSize(len,weight);//框架大小
		   setDefaultCloseOperation(DISPOSE_ON_CLOSE);//關閉方式
		
	}
}
public class swingDemo {
	public static void main(String[] args) {
		  MyJframe myJframe = new MyJframe("主界面",200, 200);
		  JButton btn1 = new JButton("按鈕1");
		  myJframe.getContentPane().add(btn1);
		 myJframe.setVisible(true);	  
	}
}

運行結果
運行圖

標籤(Jlabel)

  • 標籤是一個包含說明性文本,圖標,或兩者都有的用戶組件。可以使用Jlabel來創建標籤,它通常用來說明界面上其他組件的用途。用戶不能直接編輯

常用方法

構造方法概述
public JLabel()//創建無圖像且標題爲空的 JLabel。
public JLabel(Icon image)//創建具有指定圖像的 JLabel 實例。
public JLabel(String text)//帶指定文本的標籤
public JLabel(String ,int)//帶指定文本的標籤和對齊方式的標籤
public JLabel(String ,Icon,int)//帶指定文本,圖標和指定對齊方式的標籤
方法概述
public void setText(String text)//設置標籤文本
public String getText() //獲得標籤文本
public void setIcon(Icon icon) //設置該組件上顯示的圖標
public Icon getIcon()              //獲得該組件上顯示的圖標

對齊方式有SwingConstants接口的三個靜態類變量來指定:LEFT,CENTER,RIGHT
例如:

 JLabel  lb1 = new JLabel("第一個標籤");
 JLabel lb2 = new JLabel("第二個標籤",SwingConstants.LEFT);//創建一個左對齊的標籤

文本框(JTextField)

  • 文本框是界面上的一塊區域,用戶可以通過鍵盤輸入,修改其中的內容,文本框能夠處理一行的內容。
    方法
構造方法概述
public JTextField()      //一個空的文本框
public JTextField(String text)   //一個指定文本的文本框
public JTextField(int columns) //一個指定寬度的文本框
public JTextField(String text,int columns)一個指定寬度,包含指定文本的文本框
方法概述
public void setHorizontalAlignment(int alignment)
//設置文本的水平對齊方式。有效值包括:JTextField.LEFT ,JTextField.CENTERJTextField.RIGHT,
JTextField.LEADING JTextField.TRAILING 
public int getHorizontalAlignment()   //返回文本的水平對齊方式。
public void setColumns(int columns)   //設置此 TextField 中的列數
public int getColumns()               //返回此 TextField 中的列數。 
public void setFont(Font f)          //設置當前字體。
public void setText(String t)        //設置文本值
public String getText()             //返回文本值

密碼框(JPasswordField)繼承了JTextFiled
public void setEchoChar(char c)  //使用指定字符隱藏輸入。
public char[] getPassword()   //返回此 TextComponent 中所包含的文本。
package SwingDemo;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("測試界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
	   JPasswordField passwordField = new JPasswordField(10);
	   passwordField.setHorizontalAlignment(JPasswordField.CENTER);
	   passwordField.setEchoChar('*');
	   panel.add(passwordField);
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

運行結果
測試結果

文本區域(JTextArea)

文本區域是能夠處理多行輸入的可編輯文本框
方法

構造方法
public JTextArea()    //一個空的文本框
public JTextArea(String text)   //構造顯示指定文本的新的 TextArea。
public JTextArea(int rows, int columns) //構造具有指定行數和列數的新的空 TextArea。
public JTextArea(String text,int rows, int columns)//構造具有指定文本、行數和列數的文本框
方法概述
public void setLineWrap(boolean wrap)//設置文本到達邊界,是否自動換行
public boolean getLineWrap()               //獲取文本區是否換行。
public void setWrapStyleWord(boolean word)設置換行方式,
//如果設置爲 true,將當前單詞換到下一行,false將當前字符換到下一行
public int getLineCount()               //確定文本區中所包含的行數。 
public void append(String str)      //將給定文本追加到文檔結尾。
public void insert(String str,  int pos)//將指定文本插入指定位置。
package SwingDemo;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("測試界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
	     JTextArea textArea = new JTextArea("this is a  JTextArea",5,10);
	    textArea.setEditable(true);
	    textArea.setLineWrap(true);
	    textArea.setWrapStyleWord(true);
	    panel.add(textArea);
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

測試界面

滾動條(JScrollBar)

  • 滾動條讓用戶能夠選擇大型區域的一部分,已查看其他的內容;通常用於行數很多,無法再圖形用戶界面中同時全部顯示出來的文本區域;
  • 用戶可以通過拖動兩個箭頭之間的滾動快來移動特定的位置。用戶單擊箭頭時,可移動較小的距離,在箭頭和滾動快之間單擊時,可移動較大的區域。
  • 有些Swing組件內置了滾動條功能,這包括可滑動窗格和列表框,也可單獨創建滾動條。

方法

構造方法概述
public JScrollBar()
		//創建一個垂直滾動條,默認值minimum = 0  maximum = 100 value = 0 extent = 10
		//  “跨度”(extent)是指可見區域的大小。它又被稱爲“可見量”。 
public JScrollBar(int orientation)
		//方向有類常量決定,HORIZONTAL,VERTICAL
		//創建具有指定方向滾動條.默認值:minimum = 0  maximum = 100 value = 0 extent = 10
public JScrollBar(int orientation,int value, int extent, int min, int max)
		//創建具有指定方向、值、跨度、最小值和最大值的一個滾動條。
方法概述
public void setModel(BoundedRangeModel newModel)
		//設置處理滾動條的以下四個基本屬性的模型:minimum、maximum、value 和 extent。
public BoundedRangeModel getModel()
		//返回處理滾動條的四個基本屬性的數據模型:minimum、maximum、value 和 extent。 
public void setOrientation(int orientation)
		//將滾動條的方向設置爲 VERTICAL 或 HORIZONTAL。
public int getOrientation()    //返回組件的方向(橫向或縱向)。 

可滾動窗格

  • Swing中的文本區域是不包含水平滾動條和垂直滾動條,單獨使用這種組件時,無法加入水平滾動條和垂直滾動條
  • Swing增加了一種新的容器:JScrollPane,可用來放置任何可滾動的組件,在可滾動窗格的構造方法中,可以將其與組件關聯起來
  • 滾動條可以使用ScrollPaneConstants的靜態類變量來設置。

使用方法

構造方法
public JScrollPane()
        //創建一個空的(無視口的視圖)JScrollPane,需要時水平和垂直滾動條都可顯示。 
public JScrollPane(int vsbPolicy, int hsbPolicy)
		//創建一個具有指定滾動條策略的空(無視口的視圖)
		//vsbPolicy - 指定垂直滾動條策略的一個整數 
		//hsbPolicy - 指定水平滾動條策略的一個整數
		//ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED     需要時顯示
		//ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER              從不顯示
		//ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS            一直顯示
public JScrollPane(Component view)
		//創建一個顯示指定組件內容的 JScrollPane,只要組件的內容超過視圖大小
		//就會顯示水平和垂直滾動條。 
public JScrollPane(Component view,int vsbPolicy,int hsbPolicy)
		//創建一個 JScrollPane,它將視圖組件顯示在一個視口中,
		//視圖位置可使用一對滾動條控制。滾動條策略指定滾動條在何時顯示,
方法概述
public void setHorizontalScrollBarPolicy(int policy)//設置水平滾動條策略
public int getHorizontalScrollBarPolicy()    //返回水平滾動條策略值。 
public void setVerticalScrollBarPolicy(int policy)//確定垂直滾動條何時顯示在滾動窗格上。
public int getVerticalScrollBarPolicy()  //返回垂直滾動條策略值。 
package SwingDemo;

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

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("測試界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
		 JTextArea textArea = new JTextArea("this is a JTextArea with JScrollBar",3,5);
		JScrollPane scrollPane = new JScrollPane(textArea);
	    panel.add(scrollPane);
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

運行結果

複選框(JCheckBox)和單選按鈕(JRadioButton)

(JCheckBox和JRadioButton的方法完全一致)

構造方法
JCheckBox() 
          創建一個沒有文本、沒有圖標並且最初未被選定的複選框。 
JCheckBox(Action a) 
          創建一個複選框,其屬性從所提供的 Action 獲取。 
JCheckBox(Icon icon) 
          創建有一個圖標、最初未被選定的複選框。 
JCheckBox(Icon icon, boolean selected) 
          創建一個帶圖標的複選框,並指定其最初是否處於選定狀態。 
JCheckBox(String text) 
          創建一個帶文本的、最初未被選定的複選框。 
JCheckBox(String text, boolean selected) 
          創建一個帶文本的複選框,並指定其最初是否處於選定狀態。 
JCheckBox(String text, Icon icon) 
          創建帶有指定文本和圖標的、最初未選定的複選框。 
JCheckBox(String text, Icon icon, boolean selected) 
          創建一個帶文本和圖標的複選框,並指定其最初是否處於選定狀態。 
方法概述
protected String paramString() //返回此 JCheckBox 的字符串表示形式。
package SwingDemo;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("測試界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
	    JCheckBox checkBox = new JCheckBox("選擇1");
	    JRadioButton radioButton = new JRadioButton("選擇2");
	    panel.add(checkBox);
	    panel.add(radioButton);
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

運行結果

  • 複選框和單選按鈕通常是非互斥的,即如果一個容器中有五個複選框,五個可以同時選中或不選中;爲了使單選框互斥,必須將相關的組件分組。
  • 要將多個單選按鈕組織成一組,只允許每次選中其中一個,可以創建一個ButtonGroup對象。
package SwingDemo;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("測試界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
		 ButtonGroup buttonGroup =new ButtonGroup();
	    JCheckBox checkBox1 = new JCheckBox("選擇1");
	    buttonGroup.add(checkBox1);
	    panel.add(checkBox1);
	    JCheckBox checkBox2 = new JCheckBox("選擇2");
	    buttonGroup.add(checkBox2);
	    panel.add(checkBox2);
	    JCheckBox checkBox3= new JCheckBox("選擇3");
	    buttonGroup.add(checkBox3);
	    panel.add(checkBox3);
	     
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

運行結果

下拉式列表和組合框(JComboBox)

  • JComboBox可創建兩種用戶界面組件:下拉式列表和組合框
  • 下拉式列表(也叫選擇列表)讓用戶能夠選擇列表中的一項。列表可被配置成僅當用戶單擊組件時才顯示,這樣在圖形用戶界面佔用的空間將更小。
  • 組合框是有附加特性的下拉式列表:有一個文本框,可用來提示響應信息。
構造方法
JComboBox() 
          創建具有默認數據模型的 JComboBox。 
JComboBox(ComboBoxModel aModel) 
          創建一個 JComboBox,其項取自現有的 ComboBoxModel。 
JComboBox(Object[] items) 
          創建包含指定數組中的元素的 JComboBox。 
JComboBox(Vector<?> items) 
          創建包含指定 Vector 中的元素的 JComboBox。 
方法概述
public void addItem(Object anObject)
         //爲項列表添加項。僅當 JComboBox 使用可變數據模型時此方法纔有效。
public void removeItem(Object anObject)
		//從項列表中移除項。僅當 JComboBox 使用可變數據模型時此方法纔有效。
public void removeItemAt(int anIndex)
		//移除 anIndex 處的項。僅當 JComboBox 使用可變數據模型時此方法纔有效。
public void removeAllItems()
		//從項列表中移除所有項。
public int getSelectedIndex()
		//返回列表中與給定項匹配的第一個選項。不存在返回-1 
public void setSelectedIndex(int anIndex)
		//選擇索引 anIndex 處的項。0代表第一項,-1代表沒選
public Object getSelectedItem()
		//返回當前所選項。
package SwingDemo;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("測試界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
		 String s[] =new String[]{"math","english","chinese","physics","chemistry"};
		JComboBox comboBox =new JComboBox(s);
		comboBox.addItem("biology");
		comboBox.removeItemAt(1);
	     panel.add(comboBox);
	     
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

運行結果
運行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章