Java自学总结之七图形用户接口

2023-10-26

图形用户接口也就是一个人机交互的界面,下面先介绍一下界面的组成:

1. JFrame框架,这个是屏幕上的Windows的对象,在创建界面时,这个是首要创建的,如果把设计一个界面比喻为画水彩画,那么它就相当于一个支架,在画画前先安好支架如右图

2. JPanel面板,组件是不能直接加载JFrame上的,必须先得到面板,然后在添加其他组件,面板就和上图的画板一个道理

3. widget组件,就相当于在画板上画的图形,JButton、JCHeckBox等

JFrame frame;
JButton button;
frame = new JFrame();
button = new JButton("click me!");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Windows关闭时该程序自动关闭
frame.getContentPane().add(button);
frame.setSize(300, 300);
frame.setVisible(true);	

上面是一个设计了一个单纯的界面,那么下面将介绍如何设计一个有功能的界面  ,这里以按钮组件为例,在按下按钮之前显示"click me",在按下按钮之后显示"I have been clicked",那么这里就有一个问题就是程序如何知道按钮被按下,如何知道要改变按钮上的文字:

1. 事件来源:JButton ,JCheckBox等组件接收注册,并在取得用户的操作,并调用相应的接口方法

2. 事件对象:MouseEvent, KeyEvent等,在调用接口的方法时,此会作为参数被调用

3.监听接口:MouseListener,KeyListener等接口,这里,我们一般扮演监听接口的任务,也就是向按钮等组件注册并实现接口的方法

当我们对事件来源做出相关的动作时会产生事件对象。

public class SimpleGuil implements ActionListener{
	JFrame frame;
	JButton button;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SimpleGuil gui = new SimpleGuil();
		gui.go();
	}
	public void go(){
		frame = new JFrame();
		button = new JButton("click me!");
		button.addActionListener(this);//注册,并得到事件对象
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().add(button);
		frame.setSize(300, 300);
		frame.setVisible(true);	
	}
	public void actionPerformed(ActionEvent event){//<span style="font-size:24px;color:#ff0000;">这里就是接口的实现方法,当用户做出相应的操作时,编辑器就会自动调用这个函数,而不用我们手动调用</span>
		button.setText("I have been clicked!");
	}

}
这里我再写一下关于面板的问题,面板类JPanel的方法是PaintComponent()函数,一般情况下,我们是不会自己调用该函数,而是面板所处的Frame显示时,该函数就会被调用

public class SimpleAnimation {
	int x = 70;
	int y = 70;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SimpleAnimation gui = new SimpleAnimation();
		gui.go();
	}
	public void go(){
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		MyDrawPanel1 drawPanel = new MyDrawPanel1();
		frame.getContentPane().add(drawPanel);
		frame.setSize(300, 300);
		frame.setVisible(true);
		
		for(int i = 0;i<130;i++)
		{
			x++;
			y++;
			drawPanel.repaint();
			try{
				Thread.sleep(50);
			}catch(Exception ex){}
		}
		}
	class MyDrawPanel1 extends JPanel {<span style="white-space:pre">				</span><span style="font-size:24px;color:#ff6666;">//这边引入了一个内部类的概念</span>
		public void paintComponent(Graphics g){
			g.setColor(Color.white);
			g.fillRect(0, 0, this.getWidth(), this.getHeight());
			g.setColor(Color.green);
			g.fillOval(x, y, 40, 40);
		}
	}

}




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java自学总结之七图形用户接口 的相关文章

  • 将 Google Closure 模板与 jQuery 结合使用

    我们开始使用 JavaScript 和 HTML5 创建一个应用程序 该应用程序将使用 REST API 来访问服务器资源 利用我们的开发团队已经熟悉的 jQuery 的强大功能和易用性 该应用程序将成为多语言版本 后来我们决定使用 Jav
  • Flutter - 检测充满其他小部件的屏幕上的点击

    我正在尝试检测屏幕上的点击 我尝试过使用的多种变体GestureDetector但这只会导致应用程序检测到点击子元素 and 不是屏幕 这是代码 class QQHome extends StatelessWidget override W
  • 在 Flutter 中实现双向列表视图

    Flutter中如何实现双向滚动视图 ListView 有一个scrollDirection 字段 但它只能采用Axis horizo ntal 或Axis vertical 有可能两者兼得吗 这是使用外部的潜在解决方案SingleChil
  • 如何在 Qt 中的小部件下绘制阴影?

    我想知道如何在 Qt 中的小部件 不是主小部件 例如标签 下绘制阴影 我需要使用样式表还是需要对其进行编码 用 C 假设您有一个表单和一个标签 想要从中投射阴影 您可以使用QGraphics 阴影效果 http qt project org
  • 如何禁用 Kivy 中的小部件?

    我阅读了 Kivy 教程 但找不到如何禁用小部件 例如按钮 def foo self instance args main business logic and then instance disable False type instan
  • 如何禁用文本小部件的输入但允许编程输入?

    我该如何锁定一个Text小部件 以便用户只能选择并从中复制文本 但我仍然可以将文本插入到Text来自函数或类似函数 您是否尝试过简单地禁用文本小部件 text widget configure state disabled 在某些平台上 您
  • 将 ios 小部件添加到现有的反应本机项目后无法构建:找不到架构 x86_64 的符号

    我有一个现有的react native项目 在创建新的ios小部件目标后 不修改任何内容 然后构建 我收到编译错误 Undefined symbols for architecture x86 64 swift getOpaqueTypeC
  • Jupyter 小部件未出现在笔记本中

    我正在运行 jupyter 笔记本 但 jupyter 小部件没有出现 相反 我收到以下消息 Failed to display Jupyter Widget of type Button If you re reading this me
  • Lollipop Android 锁屏小部件

    棒棒糖中的锁定屏幕小部件是否有任何更改 虽然官方文件明确显示没有变化 但是 http www extremetech com computing 192112 android 5 0 lollipop all details and fea
  • 是否可以在扩展 AppWidgetProvider 的 Widget 中使用 TextView Marquee?

    我对Android编程很陌生 我到处都读过 但似乎找不到任何解决方案 基本问题是我在小部件中有一个 TextView 并且我希望当文本长于 TextView 布局宽度时文本滚动 这是我在layout widget xml 中的代码
  • 如何在 flutter 上创建带有圆角的方形头像?

    我想创建一个类似于 CircleAvatar 的小部件 但不是圆形的 这是圆形头像 这就是我想要创建的头像 我想知道是否有一个默认的小部件可以执行此操作 例如用于圆形头像的 CircleAvatar 有很多方法可以实现它 但我只会使用一种
  • 努力绑定 tkinter 文本小部件中的标签

    我在 tkinter 模块中的文本小部件上遇到了一些困难 我添加了尝试将函数绑定到的标签 无论我如何输入 它都会发生以下两种情况之一 我可以单击文本小部件 但弹出的唯一功能是最后一个项目 无论我单击何处 第二件事是它会自动输出所有功能 对原
  • 如何在主题激活时填充侧边栏上的小部件

    我想做的是在主题激活时使用一些默认小部件预先填充侧边栏小部件区域 if dynamic sidebar sidebar 确实添加了小部件 但它没有显示在小部件部分的侧栏中 并且 if is active sidebar sidebar 如果
  • 按 HOME 按钮不会从配置活动返回小部件 ID

    Error appWidgetId EXTRA APPWIDGET ID was not returned from the widget configuration activity public class WidgetConfigur
  • 如何在小部件中使用列表视图? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建一个从 rss feed 加载到小部件中的列表视图 有谁知道如何在小部件中使用列表视图的教
  • 如何在 Flutter 中使用函数创建动态 TabBarView/ 渲染新 Tab?

    所以我学习flutter有一段时间了 就卡在这个了 抱歉 如果这是一个新手问题 我目前正在尝试构建类似卡片选项卡的东西 信息和小部件将存储在卡中 想象一下像 Tinder 这样的东西 他们有多个卡片堆 并且左右滑动即可导航 我计划创建它 但
  • Qt Designer 与手动编码

    每次我使用图形工具包开始一个项目时 第一个冲突就会发生在如何处理视觉设计和小部件布局的决定上 图形工具还是手动编码 这是一个非常棘手 主观的问题 因为大多数人会根据个人喜好来决定 它还很大程度上取决于图形工具的质量 在这种情况下 我想只关注
  • 在主屏幕上创建文件夹,我可以在其中放置一些图标在网格中

    在Android中我想做主屏幕上的文件夹以编程方式喜欢清理大师为游戏助推器所做的事情谷歌也将其所有应用程序放在一个文件夹中 我尝试使用 Live 文件夹 但它已被弃用 并且在最新的 Android 版本中也不适用于我 它是一个小部件还是我无
  • 在文本小部件中重新绑定“全选”

    我正在使用文本小部件 并且有一个关于 Tk 使用的老式快捷方式的问题 Ie 全选 Ctrl vs Ctrl a Cut Ctrl w vs Ctrl x Copy Meta w vs Ctrl c Paste Ctrl y vs Ctrl
  • 使用 matplotlib 滑块小部件更改图像中的 clim

    我几乎没有使用 python 的经验 但我正在尝试创建一个简单的脚本 该脚本加载图像并使用滑块小部件来调整颜色条的最小值和最大值 并相应地重新绘制图像数据 我正在尝试遵循这个例子 http matplotlib sourceforge ne

随机推荐

  • 【Python技巧】(虚拟环境报错、pycharm)无法加载文件 ...\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。

    一 问题出现 使用Pycharm设置虚拟环境后 打开终端出现如下报错 无法加载文件 venv Scripts activate ps1 因为在此系统上禁止运行脚本 二 解决方式 已管理员的身份打开powershell终端 然后查询get e
  • c++ main函数调用 类中的枚举_利用Doxygen给C程序生成注释文档

    利用Doxygen为C程序生成注释文档 一 Doxygen工具的安装 利用Doxygen工具生成API帮助文档需要下载安装以下三个软件 1 Doxygen 可以从一套归档源文件开始 生成HTML格式的在线类浏览器 或离线的 LATEX RT
  • 图像去雾算法学习

    现有的图像采集设备对外界环境的干扰非常敏感 在雾霾环境中 获取的户外图像往往退化严重 主要表现为场景特征信息模糊 对比度低 色彩失真 不利于计算机视觉系统对图像真实特征的提取 从而影响其后续的分析 理解 识别等一系列处理 很大程度上降低了视
  • vue3.0安装sass(scss)以及报错解决

    本篇文章主要记录了笔者安装sass的过程 1 安装ruby 首先在官网中下载 https rubyinstaller org downloads 下载之后进行安装 在安装过程中 要记得勾选添加环境变量的选项 其他的就是一直next就可以了
  • jq的核心函数

    jquery的核心函数 1 代表接受一个函数 也就是我们平常用的入口函数 2 接受一个字符串 2 1 接受一个字符串选择器 2 2 接受一个代码片段 3 接受一个dom对象 会被包装成jquery对象返回给我们
  • apk内部存储路径

    首先内部存储路径为 data data youPackageName 下面讲解的各路径都是基于你自己的应用的内部存储路径下 所有内部存储中保存的文件在用户卸载应用的时候会被删除 一 files Context getFilesDir 该方法
  • 数据结构之链栈

    栈介绍 首先 它是一个线性表 准确的说 应该是一个插入 删除受限制的线性表 它仅仅在表尾进行插入和删除操作的线性表 我们把这种受限制的线性表称为栈 如果栈的元素在使用时出现了元素变化不可预测的情况 有时很大 有时又很小 这种情况下 则建议使
  • linux查看jvm内存

    查看内存大小 free h free命令相关知识 判断Java程序对内存的消耗 top top命令相关知识 查看tomcat信息 ps ef grep tomcat 4 1分析内存实例 pid 21069 使用jmap来查看jvm的堆的快照
  • MySQL数据库基本操作

    一 数据库的操作 CURD 重点 1 创建数据库的语法 基本语法 create database 数据库名称 2 查看数据库 show databases 查看所有数据库 use 数据库名称 使用数据库 show create databa
  • Node.js 应用的御用品: Node.js 错误处理系统

    开发中 有些开发者会积极寻求处理错误 力求减少开发时间 但也有些人完全忽略了错误的存在 正确处理错误不仅意味着能够轻松发现和纠正错误 而且还意味着能够为大型应用程序开发出稳健的代码库 特别是对于 Node js 开发人员 他们有时会也发现自
  • 上班一个月,我的几点体会

    这篇博文其实在去年就已经在CSDN发过的 后来 某次误操作不小心删除了 今天找出来重新发一下 我是从3月1号开始上班的 今天3月31号 刚好一个月结束 在这一个月里 我收获不少 感受颇深 现谈谈自己的几点感受 与大家分享 1 由于在学校里做
  • JDBC与MySQL数据库的连接

    一 Jdbc连接池 概念 一个容器 存放数据库连接的容器 好处 节约资源 用户访问高效 规范 1 用连接池管理连接 可以重复利用 2 不是 自己创建连接 而是通过连接池获取连接 3 使用完之后调用连接的close 方法归还连接 不是关闭连接
  • Unity中可用Lua版本效率分析比较

    欢迎来到你的代码我的鱼 oooofish com 本篇文章主要介绍Unity中可用的lua版本对比及分析 目前常见的unity lua库有以下 luainterface ulua nlua unilua 简单介绍 luainterface
  • js一个简单的ajax示例,原生JS简单实现ajax的方法示例

    本文实例讲述了原生JS简单实现ajax的方法 分享给大家供大家参考 具体如下 HTML部分 这里有个input按钮 点击会触发click事件 click事件调用Ajax 方法 JS部分 通过这个函数来异步获取信息 function Ajax
  • lighttpd+fastcgi嵌入式web交叉编译到arm

    文章目录 前提 lighttpd交叉编译安装 源码下载 交叉编译 简单测试 fastcgi编译配置 源码下载 交叉编译生成动态库 修改lighttpd配置 简单测试 c语言fcgi程序 c fcgi程序 gitee仓库链接 参考 前提 环境
  • 【Tools】Windows电脑ipad文件互传

    1 首先要知道windows端的ip和用户名 在命令行 win r 再输入cmd即可打开命令行 输入ipconfig 2 windows端创建一个共享文件夹 随便在电脑上创建一个文件夹 右键创建的文件夹点击属性 再点击共享 3 进入高级共享
  • nvm npm exit status 1:乱码

    node npm nrm nvm 最近要搞vue 之前装了最新的node启动报错 最后值版本问题 查阅资料后用版本管理工具搞好了 npm nrm nvm傻傻分不清 npm node包管理工具 nrm 提供和管理npm包下载地址 nvm no
  • 虚拟机VMware安装Centos7教程

    先安装好VMware 点击该链接进入官网下载 下载后网上找找破解 然后就是安装Centos7了 1 下载Centos7 这里用阿里云的镜像 centos安装包下载 开源镜像站 阿里云 ps 这里再补充贴一下一些镜像地址 哪个快选哪个 最快的
  • 图像对齐(image alignment)

    1 图像对齐的步骤 已知图像A和B 图像对齐的步骤 提取图像A和B的特征 匹配图像A和B中的特征 求解图像A和B的对齐矩阵 2 使用最小二乘求解对齐矩阵的问题 使用最小二乘求解对齐矩阵容易受到outliers的影响 误差会很大 3 RANS
  • Java自学总结之七图形用户接口

    图形用户接口也就是一个人机交互的界面 下面先介绍一下界面的组成 1 JFrame框架 这个是屏幕上的Windows的对象 在创建界面时 这个是首要创建的 如果把设计一个界面比喻为画水彩画 那么它就相当于一个支架 在画画前先安好支架如右图 2