GUI 设计
GUI(图形化界面编程)
Graphical User Interface
(java.Awt javax.Swing)
CLI(命令行操作接口)
Command line User Interface
现在讲解GUI:
java.Awt: Abstract Windows ToolKit:主要是调用本地系统方法实现(依赖于操作系统),重量级组件。
javax.Swing: 在Awt的基础上,建立了一套图形界面系统,其中提供了大量组件,完全由java实现,增强了移植性,轻量级组件
我们主要使用 javax.Swing.
框架的继承关系:
Object
|---Component : 组件
|---Button : 按钮(可添加文字标签)
|---Label : 标签(封装文字)
|---Checkbox : 复选框、检查盒
|---TextComponent :文本组件
|---TextArea : 文本域(一个多行的文本框)
|---TextField : 文本框(一个单行的文本框)
|---Container : 为容器(是一个特殊的组件,可以通过add方法添加别的组件进来。)
|---Window : 窗口 (在Container上添加了更多功能)
|---Dialog : 对话框(绑定与其他容器,一般做提醒功能,参数为true锁定后面的窗口)
|---FileDialog :文本对话框(打开或者保存文件的对话框,靠参数区别功能)
|---Frame : 框架 (整个框架的主要载体、容器)
|---Panel : 仪表板
|---MenuComponent : 菜单组件
|---MenuBar :菜单栏
|---MenuItem :菜单条目
|---Menu :菜单
|---PopupMenu :动态菜单
布局: 容器中的排列方式
常见的布局管理器:
1、FlowLayout(流式布局管理器)。
从左到右的顺序排列。
panel默认的布局管理器。
2、BorderLayout(边界布局管理器)。
东,南,西,北,中。
Frame默认的布局管理器。
3、GridLayout(网格布局管理器)。
规则矩阵排列。
4、GridBagLayout(网格包布局管理器)。
不规则矩阵排列。
5、CardLayout(卡片式布局管理器)。
选项卡排雷。
一、界面布局设置
方法学习: 该包中的方法太多,大部分方法要自己在开发时查阅文档。
但是Container(窗体)重点掌握。
Conponent:
构造方法:看其子类。
调整组件是否显示: void setVisible(boolean b) 根据参数 b 的值显示或隐藏此组件(参照Frame中最初不可见的构造方法)。
调整组件大小: void setSize(Dimension d) 调整组件的大小,使其宽度为 d.width,高度为 d.height。
void setSize(int width, int height) 调整组件的大小,使其宽度为 width,高度为 height。
调整组件位置: void setLocation(int x, int y) 将组件移到新位置(左上角据窗口的左上角)。
void setLocation(Point p) 将组件移到新位置(Point为一个坐标对象,其他同上)。
调整组件位置和大小: void setBounds(int x, int y, int width, int height) 移动组件并调整其大小。
Container:
构造方法:看其子类。
布局设置:
void setLayout(LayoutManager mgr) 设置此容器的布局管理器。
Frame:(默认边界布局)
构造方法:
Frame() 构造一个最初不可见的 Frame 新实例()。
Frame(GraphicsConfiguration gc) 使用指定的 GraphicsConfiguration 构造一个最初不可见的新 Frame。
Frame(String title) 构造一个新的、最初不可见的、具有指定标题的 Frame 对象。
Frame(String title, GraphicsConfiguration gc) 构造一个新的、初始不可见的、
具有指定标题和 GraphicsConfiguration 的 Frame 对象。
创建图形化界面方法及示例:
1、创建frame窗体。
2、对窗体进行基本设置
如:大小、位置、布局方式、颜色等。。
3、定义组件。
4、将组件通过add方法添加到窗体中。
5、让窗体可以显示,通过 setVisible(true)方法。
如:
import java.Awt.*;
class AwtDemo
{
public static void main(String []args)
{
Frame f = new Frame("my awt");
f.setSise(400,500);
f.setLocation(300,400);
f.setLayout(new Flowlayout());
Butten b = new Butten("I\'m a Butten");
f.add(b);
f.setVisible(true);
}
}
二、事件监听机制(事件在界面创建之后,事件和界面应该分开创建)event
就是监听组件是否发生动作 (按钮是否被按等),一定发生,判断动作,调用功能做出反应。
1、事件源(组件)
2、事件(Event) (每个事件源都有特有事件和共有事件)
3、监听器(Listener) (将可以触发某一个事件的动作(不止一个)都已经封装到监听器中)Adapter(适配器)
4、事件处理(事件引发后的处理方式)(我们可以处理的)
方法: 1、明确事件源:各种的组件(包括容器)
2、通过组件对象调用监视器绑定方法绑定监视器,一个事件源可以发生多种事件,也就可以绑定多种的事件监视器。
该方法使用对应监视器对象为参数此处常用匿名内部类,
3、监视器中封装的是对事件的处理方法,这些方法要传入事件对象为参数(形参定义方式),
而我们要复写这些对事件的处理方法,达到操作事件的的目的。
三、各种事件学习。
活动事件:
绑定活动事件监听器:f.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
//处理语句
}
});
绑定键盘事件监听器:bt.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e){
//处理语句
}
});
其他事件的监听处理类似。
四、netbeans
一个用于处理图形界面编译的IDE,可以使用画布功能直接涉及框架的大小及布局,之后自动生成代码,在此基础上
添加监听等其他代码(简单的监听事件已经在设计步骤处理完毕)。
五、ToolKit
此类是所有 Abstract Window Toolkit 实际实现的抽象超类。Toolkit 的子类被用于将各种组件绑定到特定本机工具包实现。
static Toolkit |
getDefaultToolkit() 获取默认工具包。 |
GUI 设计的更多相关文章
- tkinter——GUI设计实操
1.创建root: from tkinter import * root = Tk() root.title('GUI设计') # root.attributes("-alpha" ...
- tkinter的GUI设计:界面与逻辑分离(一)-- 初次见面
PyQt实现界面与逻辑分离的设计很是方便,详情可以见我的第一篇博文. 不过本文将使用python的标准库 tkinter,来实现界面与逻辑分离的GUI 设计. 我们来设计一个很简单的程序: 目的:长度 ...
- Java程序设计11——GUI设计与事件处理A
1.GUI设计 Java使用AWT和Swing类完成图形用户界面编程,AWT全称是Abstract Window Toolkit,即抽象窗口工具集,它是Sun最早提供的GUI库,只是这个库功能比较有限 ...
- java.awt包提供了基本的java程序的GUI设计工具
java.awt包提供了基本的java程序的GUI设计工具.主要包括下述三个概念: 组件--Component 容器--Container 布局管理器--LayoutManager package T ...
- 第15.9节 PyQt学习入门:使用Qt Designer进行GUI设计的步骤
在使用Qt Designer进行GUI设计时,一般常规的步骤都是差不多的,主要步骤包括新建显示窗口.在窗口上按照规划的布局放置组件.设置初始化组件的属性.定义信号和槽函数的连接,一般后三步是每增加一个 ...
- 十大开源的.NET用户界面框架 让GUI设计不再犯难
选择一款合适的GUI框架是.NET开发中比较重要但又很棘手的问题,因为用户界面相当于一款应用的"门面",直接面向用户.好的UI更能吸引用户,有时甚至成为决定一款应用成败的关键.下面 ...
- 四则运算GUI设计
使用了QT来设计GUI,目前也还在看视频学习中,目前还不会用这个软件,所以具体功能还未实现,初步绘制的界面如下:
- JAVA GUI设计中遇到的一个小问题
最近新学,大牛勿喷.. 写下笔记主要是记录自己常犯的错误,也方便新人解决问题学习参考. 问题:win7下设计GUI,文本框和密码框显示不出来. 我的解决方案: 1. JTextField text = ...
- MATLAB GUI设计(线性卷积和循环卷积的比较--笔记)
原创循环卷积代码,转载需注明出处 线性卷积与循环卷积的比较 实验目的和要求 掌握循环卷积和线性卷积的原理,与理论分析结果比较,加深理解循环卷积与线性卷积之间的关系. 实验内容和步骤 1) 已知两序列X ...
随机推荐
- 洛谷 P1032 子串变换
题目链接 https://www.luogu.org/problemnew/show/P1032 本题是一道bfs问题,从a串开始,每一步完成替换一对字符串(但是一个一步替换可以将这对字符串替换好几次 ...
- 【C/C++】c文件重点总结
c文件重点知识总结 程序文件数据文件--->分文本文件(ASCII文件)和映像文件(二进制文件) .区分是用记事本打开后能否看懂. 用二进制文件读写花费时间少,因为用文本文件需要有一个转换的过程 ...
- Codeforces Round #443 Div. 1
A:考虑每一位的改变情况,分为强制变为1.强制变为0.不变.反转四种,得到这个之后and一发or一发xor一发就行了. #include<iostream> #include<cst ...
- POJ 2352 树状数组
学习自:链接以及百度百科 以及:https://www.bilibili.com/video/av18735440?from=search&seid=363548948825132979 理解 ...
- 数据库 -- mysql支持的数据类型
mysql支持的数据类型 数值类型 MySQL支持所有标准SQL数值数据类型. 这些类型包括严格数值数据类型(INTEGER.SMALLINT.DECIMAL和NUMERIC),以及近似数值数据类型( ...
- P1601 A+B Problem(高精)
原题链接 https://www.luogu.org/problemnew/show/P1601 这个题提示的很清楚,并非简单的A+B,单纯的long long型也不行(不要被样例所迷惑).因为lo ...
- BZOJ2434 [NOI2011] 阿狸的打字机 【树链剖分】【线段树】【fail树】【AC自动机】
题目分析: 画一下fail树,就会发现就是x的子树中属于y路径的,把y剖分一下,用线段树处理 $O(n*log^2 n)$. 代码: #include<bits/stdc++.h> usi ...
- BZOJ2809 dispatching 【可并堆】
题目分析: yy一下就知道了,合并用可并堆少个log. 代码: #include<bits/stdc++.h> using namespace std; ; int n,m; int b[ ...
- BZOJ5203 [NEERC2017 Northern] Grand Test 【dfs树】【构造】
题目分析: 首先观察可知这是一个无向图,那么我们构建出它的dfs树.由于无向图的性质我们可以知道它的dfs树只有返祖边.考虑下面这样一个结论. 结论:若一个点的子树中(包含自己)有两个点有到它祖先的返 ...
- Codeforces519 E. A and B and Lecture Rooms
传送门:>Here< 题意:询问给出一棵无根树上任意两点$a,b$,求关于所有点$i$,$dist(a,i) = dist(b,i)$的点的数量.要求每一次询问在$O(log n)$的时间 ...