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佈局。但元件不能直接加到對話方塊中,對話方塊也包含一個內容面板,應當把元件加到
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.卡片佈局
- JFrame frame = new JFrame("卡片管理") ;
- CardLayout card = new CardLayout() ;
- frame.setLayout(card) ;
- Container con = frame.getContentPane() ;
- con.add(new JLabel("候選人一號",JLabel.CENTER),"first") ;
- con.add(new JLabel("候選人二號",JLabel.CENTER),"second") ;
- con.add(new JLabel("候選人三號",JLabel.CENTER),"third") ;
- con.add(new JLabel("候選人四號",JLabel.CENTER),"fourth") ;
- con.add(new JLabel("候選人五號",JLabel.CENTER),"fifth") ;
- frame.pack(); //這個函式的作用就是根據窗口裡面的佈局及元件的preferedSize來確定frame的最佳大小。
- frame.setVisible(true) ;
- 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);
}
}