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 ...
随机推荐
- 4.2 rust 命令行参数
从命令行读取参数 use std::env; fn main() { let args: Vec<String> = env::args().collect(); println!(&q ...
- Swift Storyboard找不到类文件
Swift语言引入了Module概念,在通过关键字@objc(类名)做转换的时候,由于Storyboard没有及时更新Module属性,会导致如下两种类型错误: 1 用@objc(类名)标记的Swif ...
- Docker 生产环境之配置容器 - 自动启动容器
原文地址 Docker 提供了重启策略,以控制容器在退出时是否自动启动,或在 Docker 重新启动时自动启动.重启策略可确保链接的容器以正确的顺序启动.Docker 建议使用重启策略,并避免使用流程 ...
- ubuntu基础
下载地址: http://cdimage.ubuntu.com/releases/ #:配置多网卡静态IP地址和路由 root@ubuntu:~# vim /etc/netplan/01-netcfg ...
- MyBatis(1):实现MyBatis程序
一,MyBatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- 【Linux】【Services】【SaaS】Docker+kubernetes(10. 利用反向代理实现服务高可用)
1. 简介 1.1. 由于K8S并没有自己的集群,所以需要借助其他软件来实现,公司的生产环境使用的是Nginx,想要支持TCP转发要额外安装模块,测试环境中我就使用HAPROXY了 1.2. 由于是做 ...
- 【Spring Framework】Spring入门教程(七)Spring 事件
内置事件 Spring中的事件是一个ApplicationEvent类的子类,由实现ApplicationEventPublisherAware接口的类发送,实现ApplicationListener ...
- Swagger如何匹配多个Controller类或者目录
方法一(最普通的方式):匹配一个controller目录下的所有controller类. 1 @Bean 2 public Docket creatRestApi(){ 3 return new Do ...
- THUSC 2021 游记
想了想不往博客园放不行,还是放上来了. 原文 \[\texttt{Brief Introduction} \] 众所周知,THUSC2021 5 月 15-16 日在杭州市 XJ 中学举办,然而由于 ...
- LuoguP6861 [RC-03] 难题 题解
Update \(\texttt{2020.10.21}\) 删除了不需要的 \(n=1\) 的特判,并在符号与字母之间添加了空格. Content 给定一个数 \(n\),试找到一对数 \(a,b( ...