Java面向对象笔记 • 【第11章 Swing高级应用】
全部章节 >>>>
本章目录
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对话框可分为两种:模态对话框和非模态对话框。模态对话框是指用户需要等到处理完对话框后才能继续与其他窗口交互,非模态对话框允许用户在处理完对话框的同事与其他窗口交互。
Java面向对象笔记 • 【第11章 Swing高级应用】的更多相关文章
- 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...
- Java面向对象程序设计第14章3-8和第15章6
Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class tes ...
- Java面向对象程序设计第9章1-9
Java面向对象程序设计第9章1-9 1. 线程和进程的联系和区别是什么? 联系: 一个进程可以包括多个线程. 区别: 进程: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统 ...
- Java面向对象程序设计第8章3-5
Java面向对象程序设计第8章3-5 3.String类型有什么特点? 一旦赋值,便不能更改其指向的字符对象 如果更改,则会指向一个新的字符对象 不能为null 4.String什么时候进行值比较,什 ...
- Java面向对象程序设计第7章1-8
Java面向对象程序设计第7章1-8 1."程序中凡是可能出现异常的地方必须进行捕获或拋出",这句话对吗? 不对. 异常分两类,runtime异常和非runtime异常. runt ...
- java JDK8 学习笔记——第11章 线程和并行API
第11章 线程与并行API 11.1 线程 11.1.1 线程 在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run( ...
- 20191105 《Spring5高级编程》笔记-第11章
第11章 任务调度 任务调度由三部分组成: 任务:需要在特定时间运行或定期运行的业务逻辑块: 触发器:指定任务应该执行的条件: 调度程序:根据来自触发器的信息执行任务: 11.2 Spring中的任务 ...
- Java面向对象笔记 • 【第3章 继承与多态】
全部章节 >>>> 本章目录 3.1 包 3.1.1 自定义包 3.1.2 包的导入 3.1.3 包的访问权限 3.1.4 实践练习 3.2 继承 3.2.1 继承概述 3 ...
- [core java学习笔记][第十一章异常断言日志调试]
第11章 异常,断言,日志,调试 处理错误 捕获异常 使用异常机制的技巧 使用断言 日志 测试技巧 GUI程序排错技巧 使用调试器 11.1 处理错误 11.1.1异常分类 都继承自Throwable ...
随机推荐
- Oracle中的DBMS_LOCK包的使用
一.DBMS_LOCK相关知识介绍 锁模式: 名字 描述 数据类型 值 nl_mode Null INTEGER 1 ss_mode Sub Shared: used on an aggregate ...
- Linux基础命令---vmstat显示虚拟内存状态
vmstat vmstat指令用来显示虚拟内存使用状态,同时也可以显示进程.cpu活动情况.vmstat报告有关进程.内存.分页.块IO.陷阱和CPU活动的信息.生成的第一份报告给出了自上次重新启动以 ...
- 2.7 Rust Structs
A struct, or structure, is a custom data type that lets you name and package together multiple relat ...
- 【Java 8】函数式接口(一)—— Functional Interface简介
什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法. 这种类型的接 ...
- 4.Vue.js-起步
Vue.js 起步 每个 Vue 应用都需要通过实例化 Vue 来实现. 语法格式如下: var vm = new Vue({ // 选项 }) 接下来让我们通过实例来看下 Vue 构造器中需要哪些内 ...
- SQL Server 2014如何DATEDIFF()函数截取对应时间年月日
4.1 定义和用法: DATEDIFF()函数返回两个日期之间的时间 4.2 语法 DATEDIFF(datepart,startdate,enddate) datepart值: year | qua ...
- 【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
问题描述 在上篇博文"[Azure 应用服务]App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)"中,实现了通过 HT ...
- noVNC实现浏览器远程访问Windows桌面
一.简介 1.VNC介绍 VNC (Virtual Network Console)是虚拟网络控制台的缩写.它 是一款优秀的远程控制工具软件.VNC 是在基于 UNIX 和 Linux 操作系统的免费 ...
- 【Redis的那些事 · 上篇】Redis的介绍、五种数据结构演示和分布式锁
Redis是什么 Redis,全称是Remote Dictionary Service,翻译过来就是,远程字典服务. redis属于nosql非关系型数据库.Nosql常见的数据关系,基本上是以key ...
- 新建日历(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 默认的标准日历设置好了以后,问题又来了:出现某些特殊的原因,可能还需要一个与标准日历设置不同的日历,这个可怎么弄? 没关系 ...