Java面向对象笔记 • 【第11章 Swing高级应用】
阅读原文时间:2023年07月10日阅读:1

全部章节   >>>>


本章目录

11.1 JTable表格组件

11.1.1 JTable表格组件

11.1.2 实践练习

11.2 菜单组件

11.2.1 菜单组件

11.2.2 实践练习

11.3 事件处理

11.3.1 事件处理机制

11.3.2 事件和事件监听器

常用事件监听接口

11.3.3 实践练习

11.4 JDialog对话框

11.4.1 JDialog组件

JDialog 的构造方法

11.4.2 实践练习

总结:


11.1 JTable表格组件

Swing中JTable用于显示表格数据。

JTable构造方法

JTable(Object data[][], Object heads[])

data是一个二维数组,包含要显示的信息,heads是一个一维数组,其中的信息是列表头。

JTable组件使用步骤

  1. 创建一个JTable对象。
  2. 创建一个J滚动面板ScrollPane对象(指定表格及水平和垂直滚动条)。
  3. 将表格添加到滚动面板。
  4. 将滚动面板添加到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.2 菜单组件

JMenuBar菜单工具栏,可以在其中添加多个JMenu菜单条。

JMenu菜单,可以在其中添加多个JMenuItem菜单项。

JMenuItem菜单

创建JMenuBarJMenuJMenuItem实例都可以直接通过其构造方法实现,构造方法中都含有一个字符串类型参数,该参数用于指定显示在菜单上的标题。

JMenu jmf=new JMenu("文件(File)");

创建菜单可以通过setMnemonic()方法设置快捷方式

jmf.setMnemonic(“F”); //在菜单jmf上设置快捷方式F

JTable组件使用步骤:

  1. 创建菜单工具栏 JMenuBar
  2. 创建多个菜单条 JMenu
  3. 创建多个菜单项 JMenuItem
  4. 将菜单添加至对应的菜单条中。
  5. 将菜单条添加至菜单工具栏中。
  6. 将菜单工具栏加入窗体类 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.3 事件处理

11.3 事件处理

事件。发生在界面上的用户交互行为所产生的一种效果。例如,点击鼠标左键,单击一个JButton按钮,就会弹出一个对话框,单击“关闭”按钮就会关闭应用程序窗口等。

事件源。发生事件的对象被称为事件源,如按钮、JFrame窗口均为事件源。

事件监听器。负责监听事件源所发生的事件,并对各种事件做出相应的处理。

委托事件处理模式。

由事件源产生事件,委托给一个或多个事件监听器来监听事件。

当监听器监听到事件被触发时,监听器根据事件产生的类型将其转交给事件处理者(即处理的方法)来处理事件。

事件机制涉及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.4 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);
        ...
}});

总结:

  • Swing中JTable用于显示表格数据。JTable的构造方法是:JTable(Object data[][], Object heads[])
  • data是一个二维数组,包含要显示的信息,heads是一个一维数组,其中的信息是列表头。
  • JMenuBar为菜单工具栏,JMenu为菜单条,JMenuItem为菜单项。菜单组件的操作方法是将菜单项添加到菜单,再将菜单添加到菜单条。
  • 事件处理机制的三要素为事件、事件源和事件监听器,Swing采用委托事件处理模式进行事件处理。其做法是由事件源产生事件,委托给一个或多个事件监听器来监听事件。当监听器监听到事件被触发时,监听器根据事件产生的类型将其转交给事件处理者(即处理的方法)来处理事件。
  • JDialog对话框可分为两种:模态对话框和非模态对话框。模态对话框是指用户需要等到处理完对话框后才能继续与其他窗口交互,非模态对话框允许用户在处理完对话框的同事与其他窗口交互。