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自学总结之七图形用户接口 的相关文章

  • Tkinter Canvas 将项目移动到顶层

    我有一个 Tkinter Canvas 小部件 Python 2 7 而不是 3 在这个 Canvas 上我有不同的项目 如果我创建一个与旧项目重叠的新项目 它将位于前面 现在 我如何才能将旧项目移动到新创建的项目前面 甚至移动到画布上所有
  • iOS 8 今天的小部件在一段时间后停止工作

    我为德国冰球联赛 DEL 制作了一个今日小部件 我正在从我们的服务器加载下一个游戏并在 tableView 中显示它们 加载过程在建议的方法 widgetPerformUpdateWithCompletionHandler 中启动 最初我在
  • 如何以使用不同模型的形式实现kartik yii2 FileInput

    这是位于 myyiiapp backend views product form php 的代码 div class product form div
  • (jQuery 插件)在多项选择测验中拖放答案

    我正在制作一个网页 用户必须在测验中连接两个列表中的元素 例如 假设有一个测验问题 其中有两个列表 一个包含国家 地区 另一个包含首都 用户必须将首都连接到正确的国家 地区 优选地 应该有一种方式让用户将元素从第二列表拖到第一列表的元素旁边
  • Jupyter 小部件未出现在笔记本中

    我正在运行 jupyter 笔记本 但 jupyter 小部件没有出现 相反 我收到以下消息 Failed to display Jupyter Widget of type Button If you re reading this me
  • 在 Woocommerce 产品类别小部件中显示子类别档案

    我正在使用 Woocommerce 建立一家商店并使用 WooCommerce 产品类别小部件 我已经设置了许多产品类别和子类别 其中一个类别是 海报 并有几个子类别 例如 星座 旅行 自然 默认情况下 Woocommerce 仅显示父类别
  • Lollipop Android 锁屏小部件

    棒棒糖中的锁定屏幕小部件是否有任何更改 虽然官方文件明确显示没有变化 但是 http www extremetech com computing 192112 android 5 0 lollipop all details and fea
  • Jupyter R Notebook 中的 HTML 小部件

    使用 R 时 我无法在 Jupyter Notebooks 中显示 HTML 小部件 使用 python 时有效 例如 所有绘图图表都不能在 Jupyter R 笔记本中工作 有什么解决办法吗 library plotly set seed
  • 带下拉箭头的 GWT 文本框

    我想在文本框中有一个下拉箭头 在我的例子中实际上是 SuggestBox GMail 执行此操作是为了实现高级搜索功能 打开高级搜索对话框 要使该箭头显示在 TextBox 的右侧并可单击 正确的 GWT 布局是什么 看看 GMail 我发
  • 努力绑定 tkinter 文本小部件中的标签

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

    有些jquery插件扩展小部件使用 create方法 而另一些则使用 init方法 有人可以解释两者之间的区别吗 还有什么时候扩展 widget 或直接扩展 jquery fn 更好的指导 来自jQuery UI 开发人员指南 http d
  • 如何通过 Android 中小部件上的按钮运行活动?

    我正在开发一个由按钮组成的切换小部件 当按下时 我希望它运行一个活动而不打开任何东西 只是像往常一样在桌面上说 有没有办法通过桌面小部件上的按钮直接运行活动 谢谢 更新 现在我尝试在代码中切换静默模式而不运行新的活动 这是我当前的代码 当我
  • Qt:在多个布局中使用一个小部件

    我有一个 QTabBar 所有选项卡都应该有相同的小部件 layout1 gt addWidget w layout2 gt addWidget w 然而打电话addWidget第二次导致该小部件在第一个布局中消失 有没有办法使用一个小部件
  • 在 android 版本 7.0 上膨胀类 android.widget.DatePicker 时出错

    我想显示弹出日期选择器并且我使用此代码 Calendar mcurrentDate Calendar getInstance int mYear mcurrentDate get Calendar YEAR int mMonth mcurr
  • 需要知道 jQuery UI Widget 是否已应用于 DOM 对象

    我正在使用 jQuery 并与 jQuery UI 进行一些交互 我需要在其中获取选项 然而 有可能 jQuery UI 功能尚未应用于 DOM 对象 当我访问选项时 我现在收到 JavaScript 错误 我有一个带有进度条的 DOM 对
  • 删除 tkinter 文本默认绑定

    我正在制作一个简单的 tkinter 文本编辑器 但我想要所有默认绑定文本小部件如果可能的话删除 例如当我按Ctrl i它默认插入一个制表符 我制作了一个事件绑定来打印文本框中有多少行 我将事件绑定设置为Ctrl i以及 当我运行它时 它会
  • 在 Visual Studio 2017 中使用 .wid 文件

    我已经使用 Visual Studio 2017 Professional 创建了一个安装项目 vdproj file 我想使用本页中建议的密码对话框 https www codeproject com Tips 659367 Passwo
  • 如何将焦点集中到 python Tkinter 文本小部件?

    我希望能够打开应用程序 GUI 并让它自动将光标放置到特定的文本小部件中 最好的情况是 应用程序启动后 有人就可以开始输入 而无需单击文本小部件 这只是显示问题的一个小示例 from Tkinter import root Tk Windo
  • 如何使用 JavaScript 大致计算网站的连接速度?

    如何使用 JavaScript 大致计算网站的连接速度 我想创建一个像这样的javascript小部件 它将计算打开当前打开页面的速度 我想问是否可以仅使用 javascript 来完成此操作以及想法是什么 Update 请注意 页面大小始
  • 列表视图小部件不自动更新

    我的朋友已经完成了一个应用程序 现在他为他的应用程序创建了一个小部件 该小部件可用于以列表视图方式显示任务列表 首先 当他拖动小部件并安装在主屏幕中时 它将正常工作并以列表视图方式显示任务 他的问题是 当他在应用程序中进行更改然后返回主屏幕

随机推荐

  • 【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