1. 程式人生 > >Java Swing 複習(1)SWING基本元件,使用案例:文字框,密碼框,文字域,複選框,單選按鈕,下拉列表

Java Swing 複習(1)SWING基本元件,使用案例:文字框,密碼框,文字域,複選框,單選按鈕,下拉列表

一:JAVA SWING 基本元件

1      .簡介

Swing是一個用於開發Java應用程式使用者介面的開發工具包,是由純Java實現的。以抽象視窗工具包(AWT)為基礎使跨平臺應用程式可以使用任何可插拔的外觀風格,不依賴作業系統的支援,這是它與AWT元件的最大區別。Swing開發人員只用很少的程式碼就可以利用Swing豐富、靈活的功能和模組化元件來建立優雅的使用者介面。

2      .Swing的層次結構


3      .Swing容器

Swing容器分為三個:頂層容器、通用容器和專用容器。

3.1   頂層容器

頂層容器可以獨立存在,包括JFrame、JDialog、JApplet、JWindow(JDialog不可以獨立存在)。

JFrame是大多數應用程式的基本視窗,有邊框、標題和按鈕,允許程式設計師把其他元件新增到它裡面,把它們組織起來,並把它們呈現給使用者。


JDialog對話方塊。在Swing中,有兩個對話方塊類,它們是JDialog類和JOptionPane類。JDialog類提供構造並管理通用對話方塊,作為對話方塊的基類。對話方塊與一般視窗不同,對話方塊依賴其他視窗,當它所依賴的視窗消失或最小化時,對話方塊也將消失;視窗還原時,對話方塊又會自動恢復。JDialog物件也是一種容器,因此也可以給JDialog對話方塊指派佈局管理器,對話方塊的預設佈局為BoarderLayout佈局。但元件不能直接加到對話方塊中,對話方塊也包含一個內容面板,應當把元件加到

JDialog物件的內容面板中。由於對話方塊依賴視窗,因此要建立對話方塊,必須先要建立一個視窗。JDialog的構造方法有很多,這裡列舉最具代表性的一個,JDialog(JFrame f,String s,boolean b),構造一個標題為s,初始化不可見的對話方塊。引數f設定對話方塊所依賴的視窗,引數b決定對話方塊是否強制或非強制型,強制意味著禁止其他視窗輸入。JOptionPane類給一些常見的對話方塊提供許多便於使用的選項,例如下所示


JApplet是一種特殊的Java程式經過編譯後可以被嵌入到HTML中,在瀏覽器內顯示一個小程式介面。

JWindow沒有邊框標題和按鈕,用作應用程式的啟動畫面。

3.2   中間容器

中間容器不能獨立存在,必須放在頂層容器內,且能夠容納其他控制元件,包括JPanel、JScrollPane、JToolBar、JSplitPane、JTabbedPane。用法都是New出對應的面板,可以向其中新增元件,之後放到JFrame中即可,這裡不再做一一截圖。

       JPanel:最普通的面板,沒有特殊功能,主要用來容納其它控制元件。

JScrollPane:滾動面板,即帶有長寬滾動條,主要用來容納大型控制元件。

JToolBar:工具欄面板,包含圖示按鈕。可以在程式的主視窗之外浮動或是託拽。

JSplitPane:分割式面板。

JTabbedPane:選項卡面板。

3.3   特殊容器


特殊容器其實就是中間容器的一種,只不過它在圖形上個更加能夠起到美化和專業化的作用。包括JInternalFrame,JLayeredPane,JRootPane等。

JinternalFrame的使用跟JFrame幾乎一樣,可以最大化、最小化、關閉視窗、加入選單等功能;唯一不同的是JinternalFrame JInternalFrame不能單獨出現,必須依附在最上層元件上。

JLayeredPane:分層視窗,允許元件在需要時互相重疊。


4      .Swing基本元件

繼承自JComponent的元件都是swing的基本元件,它們有一些通用的方法,如設定邊框、背景顏色等。元件大致分為按鈕、文字元件、不可編輯顯示元件、選單、其他元件。

按鈕:JButton(常規按鈕)、JCheckBox(複選框)、JRadioButton(單選按鈕)。

文字元件:JTextField(文字欄位)、JPasswoordField(密碼框)、JTextArea(純文字)。

不可編輯顯示元件:JLabel(顯示不可編輯文字)、JToolTip(顯示不可編輯文字)、JProgreesBar(進度條)。

選單:JMenu(普通選單)、JPopupMenu(彈出式選單)。

其他元件:JFileChooser(檔案選擇器)、JColorChooser(顏色選擇器)、JTable(表格)、JTree(樹)、JComboBox(下拉框)等等。

元件
標籤
JLabel


畫板
BufferedImage


表單
文字框
JTextField

密碼框
JPasswordField


文字域
JTextArea


複選框
JCheckBox


單選按鈕
JRadioButton


下拉列表
JComboBox


滾動條
JScrollPane


選單欄

JMenuBar

JFrame屬性:

 //4. 設定窗體屬性        
         this.setTitle("演示流佈局管理器"); //設定標題
         this.setSize(200, 200);       //設定
         this.setLocation(200, 200);   //設定窗體出現的位置
         this.setVisible(true);        //設定窗體可見
         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設定窗體關閉的同時關閉jvm
         this.setResizable(false);  //Resizable:可調整大小的,設定窗體大小不可變

二:JAVA SWING 佈局

1. 邊界佈局管理器(FlowLayout)

         this.add(jButton, BorderLayout.CENTER);  //佈局的中間
     //  this.add(jButton2, BorderLayout.NORTH);  //佈局的北邊
   //    this.add(jButton3, BorderLayout.WEST);   //佈局的西邊
         this.add(jButton4, BorderLayout.EAST);   //佈局的東邊
         this.add(jButton5, BorderLayout.SOUTH);  //佈局的南邊
複製程式碼

效果為:

2.流佈局管理器(FlowLayout)

//3. 新增各個元件
         this.add(jButton1);  
         this.add(jButton2);  
         this.add(jButton3);   
         this.add(jButton4);   
         this.add(jButton5); 
         //設定流佈局
 //      this.setLayout(new FlowLayout()); //預設佈局方式為居中
         this.setLayout(new FlowLayout(FlowLayout.LEFT));

3.網格佈局管理器(GridLayout)

         //建立元件
         for(int i = 0; i<size; i++){
             jButton[i] = new JButton(String.valueOf(i+1)); 
  }
         
         //新增元件
         for(int i = 0; i<size; i++){
             this.add(jButton[i]);
        }
        //設定網格佈局 this.setLayout(new GridLayout(3, 3, 10, 30));複製程式碼

效果為:

4.null

null:空佈局(不使用任何佈局)容器不使用任何一個佈局新增元件則通過絕對定位方式新增(通過座標定位

5.卡片佈局

  1.  JFrame frame  = new JFrame("卡片管理") ;  
  2.         CardLayout card = new CardLayout() ;  
  3.         frame.setLayout(card) ;  
  4.         Container con = frame.getContentPane() ;  
  5.         con.add(new JLabel("候選人一號",JLabel.CENTER),"first") ;  
  6.         con.add(new JLabel("候選人二號",JLabel.CENTER),"second") ;  
  7.         con.add(new JLabel("候選人三號",JLabel.CENTER),"third") ;  
  8.         con.add(new JLabel("候選人四號",JLabel.CENTER),"fourth") ;  
  9.         con.add(new JLabel("候選人五號",JLabel.CENTER),"fifth") ;  
  10.         frame.pack();  //這個函式的作用就是根據窗口裡面的佈局及元件的preferedSize來確定frame的最佳大小。
  11.         frame.setVisible(true) ;  
  12.         card.show(con,"third") ;//展示第三個
效果圖:

三.SWING 事件管理

1.首先這個類要實現ActionListener介面

public class TestChange implements ActionListener {

2.新增事件方法

方法一:

private void addEventHandler(){
		jb.addActionListener(this);
	}

方法二:

private void addEventHandler(){
		jb1.addActionListener(new ActionListener(){


			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("+");
				jl.setText(++count+" ");
			}
			
		});
		jb2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("-");
				jl.setText(--count+" ");
			}
		});
	}

3.重寫方法actionPerformed(ActionEvent e)

@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("TestChange.actionPerformed()");
		//獲得文字框中的資料
		String s1=jtf1.getText();
		String s2=jtf2.getText();
		
		System.out.println(s1);
		System.out.println(s2);
		
		//設定文字框中的資料
		jtf1.setText(s2);
		jtf2.setText(s1);
	}

整個專案原始碼:

package www9m3;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
//可以執行,但是沒有執行沒有結果???
public class TestChange implements ActionListener {
	private JFrame jf;
	private JTextField jtf1;
	private JTextField jtf2;
	private JButton jb;
	
	public TestChange() {
		jf=new JFrame();
		jtf1=new JTextField(10);
		jtf2=new JTextField(10);
		jb=new JButton("交換");
	}
	
	private void init(){
		jf.setLayout(new FlowLayout());
		
		jf.add(jtf1);
		jf.add(jtf2);
		jf.add(jb);
		
	}
	
	private void addEventHandler(){
		jb.addActionListener(this);
	}
	public void show(){
		init();
		addEventHandler();
		jf.pack();
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new TestChange().show();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("TestChange.actionPerformed()");
		//獲得文字框中的資料
		String s1=jtf1.getText();
		String s2=jtf2.getText();
		
		System.out.println(s1);
		System.out.println(s2);
		
		//設定文字框中的資料
		jtf1.setText(s2);
		jtf2.setText(s1);
	}
}



幾種基本元件的使用案例:文字框,密碼框,文字域,複選框,單選按鈕,下拉列表

package www9m12;

import java.awt.FlowLayout;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class TestForm {
	public static void main(String[] args) {
		
		JFrame jf=new JFrame();
		
		
		jf.setLayout(new FlowLayout());
		
		//文字框
		JTextField jtf=new JTextField(10);
		jf.add(jtf);
		
		//密碼框
		JPasswordField jpf=new JPasswordField(10);
		jpf.setEchoChar('啊');
		jf.add(jpf);
		
		//文字域
		JTextArea jta=new JTextArea(15,30);
		JScrollPane jsp=new JScrollPane(jta);
		jf.add(jsp);
		
		//複選框
		JCheckBox jcb1=new JCheckBox("aaa");
		JCheckBox jcb2=new JCheckBox("bbb");
		JCheckBox jcb3=new JCheckBox("ccc");
		jf.add(jcb1);
		jf.add(jcb2);
		jf.add(jcb3);
		
		//單選按鈕
		JRadioButton jrb1=new JRadioButton("aaa");
		JRadioButton jrb2=new JRadioButton("bbb");
		ButtonGroup bg=new ButtonGroup();
		bg.add(jrb1);
		bg.add(jrb2);
		jf.add(jrb1);
		jf.add(jrb2);
		
		//下拉列表
		JComboBox jcb=new JComboBox();
		String[] items={"---請選擇---","aaa","bbb","ccc"};
		for (String item : items) {
			jcb.addItem(item);
		}
		jf.add(jcb);
		
		
		
		
		
		
		
		
		
		
		jf.pack();
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
	}
}