《Java核心技术I》Swing用户界面组件

Swing和模型-视图-控制器设计模式

用户界面组件各个组成部分,如按钮,复选框,文本框或复杂的树控件,每个组件都有三个特征:
  • 内容,如按钮的状态,文本域中的文本。
  • 外观,颜色,大小等。
  • 行为,对事件的反映。
Swing设计者采用了一种很有名的设计模式:MVC
  • 模型(model):存储内容。
  • 视图(view):显示内容。
ButtonModel接口属性
  • actionCommand,与按钮关联的动作命令字符串
  • mnemonic,按钮的助记快捷键
  • armed,按钮按下且鼠标仍在按钮上则为true
  • enabled,按下按钮钮时可选择的则为true
  • pressed,按钮按下且鼠标按键没释放则为true
  • rollover,鼠标在按钮上则为true
  • selected,按钮已经被选择(复选框和单选按钮),则为true。
每个JButton对象都存储着一个按钮对象:
var button = new JButton("Blue");
ButtonModel model = button.getModel();
JButton继承自JComponent,包含DefaultButtonModel对象,BasicButtonUI对象。
package swing;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.ButtonModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;public class ButtonModelTest {public static void main(String[] args) {JFrame frame = new JFrame("ButtonModel");JPanel buttonPanel = new JPanel();JLabel jLabel = new JLabel("ButtonModel",JLabel.CENTER);JButton jButton = new JButton("操作按钮");frame.add(jLabel,BorderLayout.CENTER);buttonPanel.add(jButton);frame.add(buttonPanel,BorderLayout.SOUTH);ButtonModel bm =  jButton.getModel();jButton.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {System.out.println("松开鼠标!");}@Overridepublic void mousePressed(MouseEvent e) {
//                System.out.println("按下鼠标!");if(bm.isArmed()) {System.out.println("按钮按下且鼠标仍在按钮上!");}if(bm.isPressed()) {System.out.println("按钮按下且鼠标按键没释放!");}}@Overridepublic void mouseExited(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {
//                System.out.println("鼠标进入按钮区域!");if(bm.isRollover()) {System.out.println("鼠标在按钮上!");}}@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("单击鼠标!");}});frame.setSize(600, 400);//初始打开为屏幕中央Toolkit toolkit = Toolkit.getDefaultToolkit();Dimension screenSize = toolkit.getScreenSize();int screenWidth = (int) screenSize.getWidth();int screenHeight = (int) screenSize.getHeight();//计算窗口位置int x = (screenWidth - frame.getWidth())/2;int y = (screenHeight - frame.getHeight())/2;frame.setLocation(x, y);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Office】Office实现shift+鼠标滚轮左右滑动

Office实现shift鼠标滚轮左右滑动 windows系统安装office之后发现,使用shift鼠标滚轮不能够实现左右滑动,我记得以前的office好像是可以的,然后在网上找了一下,找到了一个插件可以实现这个功能 OfficeScroll插件 下载地址&…

vlan和vlanif

文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法,vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…

【CAN模块】介绍一种检查CAN模块芯片好坏的方法(SN65HVD230)

文章目录 前言一、以SN65HVD230为例介绍端口特性二、代码实现总结 前言 CAN总线收发器,是CAN控制器和物理总线间的接口器件,通常工程师会按照底层协议对其控制,近日笔者仔细了解了CAN总线收发器的物理原理,找到了一种通过观察端口…

RTMP推流平台EasyDSS在无人机推流直播安防监控中的创新应用

无人机与低空经济的关系密切,并且正在快速发展。2024年中国低空经济行业市场规模达到5800亿元,其中低空制造产业占整个低空经济产业的88%。预计未来五年复合增速将达到16.03%。 随着科技的飞速发展,公共安防关乎每一个市民的生命财产安全。在…

[win10] win10系统的下载及在虚拟机中详细安装过程(附有下载文件)

前言 win10 下载:https://pan.quark.cn/s/eb40e8ca57fb 提取码:VTZq 失效(可能被官方和谐)可评论或私信我重发 下载压缩包后解压 !!安装路径不要有中文 解压下载的.zip文件,得到.iso文件 打开…

lightRAG 论文阅读笔记

论文原文 https://arxiv.org/pdf/2410.05779v1 这里我先说一下自己的感受,这篇论文整体看下来,没有太多惊艳的地方。核心就是利用知识图谱,通过模型对文档抽取实体和关系。 然后基于此来构建查询。核心问题还是在解决知识之间的连接问题。 论…

[代码随想录17]二叉树之最大二叉树、合并二叉树、二搜索树中的搜索、验证二叉搜索树。

前言 二叉树的题目还是要会一流程构造函数之类的。其中还有回溯的思想 题目链接 654. 最大二叉树 - 力扣(LeetCode) 一、最大二叉树 思路:还是考察构造二叉树,简单来说就是给你一个数组去构建一个二叉树,递归来解决就…

Docker概述与基础入门

1. 什么是Docker? Docker 是一个开源的平台,用于自动化应用程序的构建、部署和管理。它允许开发人员通过将应用程序及其依赖项打包成容器镜像,从而确保应用可以在任何环境中一致地运行。Docker 容器是轻量级的、可移植的、且具有高度隔离性的…

C# 探险之旅:第三十六节 - 类型class之密封类Sealed Classes

嗨,探险家们!欢迎再次搭乘我们的C#魔法列车,今天我们要去一个神秘又有点“傲娇”的地方——密封类(Sealed Classes)领地。系好安全带,咱们要深入“密封”的奇妙世界啦! 什么是密封类&#xff1…

QTreeView 与 QTreeWidget 例子

1. 先举个例子 1班有3个学生:张三、李四、王五 4个学生属性:语文 数学 英语 性别。 语文 数学 英语使用QDoubleSpinBox* 编辑,范围为0到100,1位小数 性别使用QComboBox* 编辑,选项为:男、女 实现效果: 2…

UE5 C++ Subsystem 和 多线程

一.Subsystem先做一个简单的介绍,其实可以去看大钊的文章有一篇专门讲这个的。 GamePlay框架基础上的一个增强功能,属于GamePlay架构的范围。Subsystems是一套可以定义自动实例化和释放的类的框架。这个框架允许你从5类里选择一个来定义子类(只能在C定义…

Linux 添加spi-nor flash支持

1. spi-nor flash简介 在嵌入式ARM开发过程中通常会使用到spi-nor flash,主要用于固化u-boot镜像以支持spi方式启动系统。目前常用的spi-nor flash有gd25wq128e、w25q128等flash芯片,下述以gd25wq128e为例进行讲解。 2.调试通常遇到的问题 无法识别到…

C# 探险之旅:第三十七节 - 类型class之Object:万物之源的奇妙冒险

嘿,勇敢的探险家们!欢迎再次踏上C#的神秘之旅。今天,我们将深入探索一个极其强大又无处不在的“大佬”——Object 类型。想象一下,它就像是C#世界里的“超级英雄祖先”,几乎所有的类型都得叫它一声“老祖宗”。 Objec…

LabVIEW实验站反馈控制系统

开发了一套基于LabVIEW的软X射线磁性圆二色实验站的反馈控制系统。这套系统主要用于实现对实验站高电压的精确控制,从而保持照射在样品上的流强稳定性,为分析样品吸收谱提供可靠基准,同时提供了易用的用户界面和强大的数据存储功能。 项目背景…

aws(学习笔记第十八课) 使用aws cdk(python)进行部署

aws(学习笔记第十八课) 使用aws cdk(python)进行部署 学习内容: 使用aws cdk(python)进行部署整体代码(python的通常工程)代码动作 1. 使用aws cdk(python)进行部署 aws cdk的整体架构 前面使用了cloudformation进行了json的aws的各种组件的…

网络基础 - TCP/IP 五层模型

文章目录 一、OSI 参考模型中各个分层的作用1、应用层2、表示层3、会话层4、传输层5、网络层6、数据链路层7、物理层 二、OSI 参考模型通信处理示例 一、OSI 参考模型中各个分层的作用 1、应用层 2、表示层 负责设备固有数据格式和网络标准数据格式间的转换 实际生活中&#…

MySQL 调优技巧|索引什么时候失效?为什么?

写在前面 优化慢SQL,这是在工作或者面试中都不可避免的问题。这篇文章我们就来讲讲慢SQL的优化的一些方法! 1. 升配 最简单的一步就是升配!!当然在降本增效的当下,很难能将这种单子审批下来了! 2. 索引…

《封装继承与多态》封装的优势

文章目录 封装在面向对象编程中的优势1. 提高代码的可读性和可维护性2. 提高代码的安全性3. 降低代码的复杂性案例举例 封装在敏捷开发和团队合作中的优势1. 促进敏捷开发2. 促进团队合作案例举例 封装在面向对象编程中的优势 封装是面向对象编程(Object-Oriented …

YOLOv5-Backbone模块实现

YOLOv5-Backbone模块实现 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器&#xff1a…