全部章節 >>>>
本章目錄
11.1 JTable表格組件
11.1.1 JTable表格組件
Swing中JTable用於顯示錶格數據。
JTable構造方法
JTable(Object data[][], Object heads[])
data是一個二維數組,包含要顯示的信息,heads是一個一維數組,其中的信息是列表頭。
JTable組件使用步驟
- 創建一個JTable對象。
- 創建一個J滾動面板ScrollPane對象(指定表格及水平和垂直滾動條)。
- 將表格添加到滾動面板。
- 將滾動面板添加到JFrame的內容窗格中。
示例:使用JTable組件顯現人員信息列表
public void init(){
BorderLayout bl=new BorderLayout();
this.setLayout(bl);
//定義表格的表頭信息
String[] heads={"姓名","年齡","電話"};
//定義表格中顯示的信息
Object[][] data={
{"丘處機","33","13870943994"},{"徐世績","28","18062795496"},
{"杜如晦","29","18600158798"},{"方孟傲","35","13836188388"},
{"杜小月","19","15248779908"},{"餘國荔","25","13238112922"},
{"羅士信","29","15927271222"},{"林徽因","34","15108235082"},
{"陳永華","39","13296693349"},{"蕭漩語","34","15847006955"}};
//創建JTable對象
jTable=new JTable(data,heads);
int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
//創建滾動條面板對象,將JTable加入滾動條中,顯示橫向和垂直滾動條
JScrollPane jsp=new JScrollPane(jTable,v,h);
//將滾動面板添加至JFrame中
this.add(jsp);
this.setSize(450, 200);
this.setVisible(true);
}
11.1.2 實踐練習
11.2 菜單組件
11.2.1 菜單組件
JMenuBar。菜單工具欄,可以在其中添加多個JMenu菜單條。
JMenu。菜單條,可以在其中添加多個JMenuItem菜單項。
JMenuItem。菜單項。
創建JMenuBar、JMenu和JMenuItem實例都可以直接通過其構造方法實現,構造方法中都含有一個字符串類型參數,該參數用於指定顯示在菜單上的標題。
JMenu jmf=new JMenu("文件(File)");
創建菜單可以通過setMnemonic()方法設置快捷方式
jmf.setMnemonic(“F”); //在菜單jmf上設置快捷方式F
JTable組件使用步驟:
- 創建菜單工具欄 JMenuBar。
- 創建多個菜單條 JMenu。
- 創建多個菜單項 JMenuItem。
- 將菜單添加至對應的菜單條中。
- 將菜單條添加至菜單工具欄中。
- 將菜單工具欄加入窗體類 JFrame 中。
示例:使用菜單組件創建菜單
public void init(){
this.setLayout(new FlowLayout(FlowLayout.LEFT));
//1.創建菜單工具欄
JMenuBar jmb=new JMenuBar();
//2.創建一級菜單JMenu
JMenu jmf=new JMenu("文件(File)");
//設置快捷方式
jmf.setMnemonic('F');
JMenu jme=new JMenu("編輯(Edit)");
jme.setMnemonic('E');
JMenu jms=new JMenu("資源(Source)");
jms.setMnemonic('s');
...
//3.創建多個JMenuItem項目,創建二級菜單
JMenuItem jmi_new_item=new JMenuItem("新建(N)");jmi_new_item.setMnemonic('N');
JMenuItem jmi_open_item=new JMenuItem("打開(O)");jmi_open_item.setMnemonic('O');
JMenuItem jmi_save_item=new JMenuItem("保存(S)");jmi_save_item.setMnemonic('S');
//4.將菜單項加入文件菜單條中
jmf.add(jmi_new_item);jmf.add(jmi_open_item);jmf.add(jmi_save_item);
//5.將菜單欄加入文件菜單條中
jmb.add(jmf);jmb.add(jme);jmb.add(jms);jmb.add(jmn);jmb.add(jmh);
//6.將菜單工具欄加入JFrame中
this.setJMenuBar(jmb);
this.setSize(400, 200);
this.setVisible(true);
}
11.2.2 實踐練習
11.3 事件處理
11.3 事件處理
11.3.1 事件處理機制
事件。發生在界面上的用戶交互行爲所產生的一種效果。例如,點擊鼠標左鍵,單擊一個JButton按鈕,就會彈出一個對話框,單擊“關閉”按鈕就會關閉應用程序窗口等。
事件源。發生事件的對象被稱爲事件源,如按鈕、JFrame窗口均爲事件源。
事件監聽器。負責監聽事件源所發生的事件,並對各種事件做出相應的處理。
委託事件處理模式。
由事件源產生事件,委託給一個或多個事件監聽器來監聽事件。
當監聽器監聽到事件被觸發時,監聽器根據事件產生的類型將其轉交給事件處理者(即處理的方法)來處理事件。
11.3.2 事件和事件監聽器
事件機制涉及3個成員:事件源、事件和事件監聽器。
事件源的創建僅需要通過new關鍵字創建一個組件對象,而事件由系統提供。所以,實現事件監聽器是整個事件處理的核心。
JDK中通過大量的事件監聽器接口用於實現不同類型的事件監聽器,來監聽不同類型的事件。
Swing中使用AWT的事件處理方式,所有的事件類均爲EventObject的子類。這些事件監聽的接口大多定義在java.awt.event中。
常用事件監聽接口
事件監聽接口 |
說明 |
ActionListener |
用於接收操作事件的監聽器接口。例如,點擊按鈕、點擊菜單項、文本框按回車等動作 |
ItemListener |
用於處理選項事件的監聽器接口。例如,選擇JCheckBox、JRadioButton、Jlist以及JcomboBox中的選項 |
KeyListener |
用於接收鍵盤事件(擊鍵)的監聽器接口 |
MouseListener |
用於處理鼠標事件(按下、釋放、單擊、進入或離開)的監聽器接口 |
TextListener |
接收文本事件的監聽器接口,用於監聽文本組件內容改變。該監聽器只有一個方法:textValueChanged(TextEvente) |
FocusListener |
接收組件上的鍵盤焦點事件的偵聽器接口,用於監聽組件收到或失去焦點 |
AWT低級事件
- ComponentEvent:組件事件,用於組件尺寸的變化和移動。
- ContainerEvent:容器事件,當容器發生添加組件、刪除組件時,觸發該事件。
- WindowEvent:窗口事件,當窗口狀態發生改變,如打開、關閉、最小化時,觸發該事件。
- FocusEvent:焦點事件,當組件得到焦點或失去焦點時觸發該事件。
- KeyEvent:鍵盤事件,當按鈕被按下、鬆開、單擊時觸發該事件。
- MouseEvent:鼠標事件,當按鈕被按下、鬆開、移動鼠標等動作時觸發該事件。
AWT高級事件
- 高級事件是基於語義的事件,它可以不與特定的動作相關聯,而依賴於觸發此事件的類。
- 例如,在TextFied(文本域)中按下Enter盤就會觸發ActionEvent事件,在滾動條上移動滑塊會觸發AdjustmentEvent事件,選中下拉列表中的某一項就會觸發ItemEvent事件。
- ActionEvent:動作事件,當按鈕、菜單項被單擊,在TextField中按Enter鍵時觸發該事件。
- AdjustmentEnvent:調節時間,在滾動條上移動滑塊時觸發該事件。
- ItemEvent:選項事件,當用戶選中某項,或取消選中某項時觸發該事件。
- TextEvent事件:文本事件,當文本框、文本域中的文本發生改變時觸發該事件。
示例:事件處理機制
//爲btn添加事件
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//使用JOptionPane類的showMessageDialog()方法彈出提示框
JOptionPane.showMessageDialog(null, "按鈕被單擊了!");
}
});
//爲JCheckBox註冊addItemListener事件
box1.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
//判斷事件源對象是否爲box1
if(e.getSource()==box1){
JOptionPane.showMessageDialog(null,"你選擇的是:"+box1.getText());
}
}
});
//爲JTextField註冊事件
text.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
//獲取輸入文本框中字符的長度
int length=text.getText().length();
if(length>10){
JOptionPane.showMessageDialog(null,"內容長度不能超過6位");
}
}
public void focusGained(FocusEvent e) {
text.setText("文本框被選中了!");
}
});
//爲JComboBox下拉列表框註冊事件
cbx.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
//判斷下拉列表框中的內容是否沒選中
if(e.getStateChange()==ItemEvent.SELECTED){
JOptionPane.showMessageDialog(null,"您的國籍是:"+cbx.getSelectedItem());
}
}
});
11.3.3 實踐練習
11.4 JDialog對話框
11.4.1 JDialog組件
JDialog。頂級窗口,它和Dialog一樣都是表示對話框。
JDialog對話框可分爲兩種:模態對話框和非模態對話框
- 模態對話框。是指用戶需要等到處理完對話框後才能繼續與其他窗口交互。
- 非模態對話框。允許用戶在處理完對話框的同事與其他窗口交互。
JDialog 的構造方法
構造方法 |
說明 |
JDialog(Frame owner) |
構造方法,用來創建一個非模態的對話框,owner爲對話框所有者(頂級窗口) |
JDialog(Frame owner, String title) |
構造方法,創建一個具有指定標題的非模態對話框 |
JDialog(Frame owner, boolean modal) |
創建一個有指定模式的無標題對話框 |
示例:JDialog組件示例
final JDialog dialog = new JDialog(f,"Dialog");
dialog.setSize(220,150); //設置對話框大小
dialog.setLocation(350, 250); //設置對話框位置
dialog.setLayout(new FlowLayout()); //設置佈局管理器
final JButton btn3 = new JButton("確定");
dialog.add(btn3); //在對話框的內容面板添加按鈕
//爲“模態對話框”按鈕添加點擊事件
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//設置對話框爲模態
dialog.setModal(true);
//如果JDialog窗口中沒有添加了JLabel標籤,就把JLabel標籤加上
if (dialog.getComponents().length==11)
dialog.add(label);
//修改標籤的內容
label.setText("模式對話框,點擊確定按鈕關閉");
dialog.setVisible(true); //顯示對話框
}});
//爲“非模態對話框”按鈕添加點擊事件
btn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//設置對話框爲非模態
dialog.setModal(false);
...
}});
11.4.2 實踐練習
總結:
- Swing中JTable用於顯示錶格數據。JTable的構造方法是:JTable(Object data[][], Object heads[])
- data是一個二維數組,包含要顯示的信息,heads是一個一維數組,其中的信息是列表頭。
- JMenuBar爲菜單工具欄,JMenu爲菜單條,JMenuItem爲菜單項。菜單組件的操作方法是將菜單項添加到菜單,再將菜單添加到菜單條。
- 事件處理機制的三要素爲事件、事件源和事件監聽器,Swing採用委託事件處理模式進行事件處理。其做法是由事件源產生事件,委託給一個或多個事件監聽器來監聽事件。當監聽器監聽到事件被觸發時,監聽器根據事件產生的類型將其轉交給事件處理者(即處理的方法)來處理事件。
- JDialog對話框可分爲兩種:模態對話框和非模態對話框。模態對話框是指用戶需要等到處理完對話框後才能繼續與其他窗口交互,非模態對話框允許用戶在處理完對話框的同事與其他窗口交互。