Java之GUI
来源:互联网 发布:季度数据季节调整 编辑:程序博客网 时间:2024/06/02 14:40
(本文为博主JAVA课程学习总结)
GUI—— 图形化用户界面
JFC(Java Foundation Classed)是开发GUI的API集
JFC包括:AWT(Abstract Window Toolkit抽象窗口工具包)、Swing组件(建立在AWT上功能更强大的图形组件包)、JAVA 2D(实现高质量二维图形)
一.AWT框架
AWT的核心类是Component类。
Component类由基本组件和容器(Container)组件组成。
容器组件主要分为两部分:Window容器和Panel(面板)容器。
*Frame:Window容器的子类,带有标题和缩放角的窗口。
Frame容器被创建后是不可见的,所以我们需要人为设置可见性。
常用方法:
显示窗体方法 void setVisible(boolean b)(在Component类中)
设置背景色 setBackground(Color C)
设置尺寸 setSize(int a , int b)(a为长,b为宽,单位为像素)
限制位置和尺寸 setBound(int x,int y,int a,int b)(x,y为窗体横纵坐标)
Panel容器只能存在于其它的容器中,不能单独显示。应用程序可以将其他组件放在面板提供的空间内,这些组件包括其它面板。
面板的默认布局管理器是FlowLayout布局管理器。
若需要要去掉panel指令的默认管理器,可初始化panel后调用方法panel.setLayout(null).
容器可以容纳容器和组件,故可以制作出复杂的布局。
二.布局管理器
布局管理器:决定组件的位置和大小。
五种布局管理器:
FlowLayout(流式布局管理器)
BorderLayout(边界布局管理器)
调用方法:
GridLayout(网格布局管理器)
CardLayout(卡片布局管理器)
它将容器中的每个组件看作一张卡片。一次只能看到一张卡片,容器则充当卡片的堆栈。当容器第一次显示时,第一个添加到 CardLayout对象的组件为可见组件。
GridBagLayout(网格包布局管理器)
每个Container都有默认的布局管理器,但是我们可以通过设置空布局管理器(setLayout(null))来控制组件的大小和位置。
设置空布局管理器后,必须对所有组件调用setLocation(),setSize()或setBound()进行一个重定位。
二.AWT事件处理
AWT事件处理主要针对下述三类对象:
Event(事件):用户对组件的一个操作
Event Source(事件源):事件发生的场所,如Button1
Event Monitor(事件监听器):监听事件是否被处理。
(引自海同网校)
(一)AWT事件
AWT相关事件继承于java.awt.AWTEvent类。
这些事件分为两大类:低级事件和高级事件。
1.低级事件:基于组件的事件,如:
ComponentEvent 组建事件:组件尺寸与位置变化
ContainerEvent 容器事件:组件增加、移动
WindowEvent 窗口事件:关闭窗口、窗口闭合、图标化
FocusEvent 焦点事件:焦点的获得和丢失
KeyEvent 键盘事件
MouseEvent 鼠标事件
2.高级事件:基于语义的事件,如:
ActionEvent 动作事件:当特定于组件的动作(比如被按下)发生时,由组件(比如Button)生成此高级别事件。事件被传递给每一个ActionListener 对象,这些对象是使用组件的addActionListener 方法注册的,用以接收这类事件。
AdjustmentEvent 调节事件:滚动条的滑动影响数目的改变等
ItemEvent 项目事件:选定或取消选定语义事件
TextEvent 文本事件:对文本对象的改变
(二)事件监听器
事件监听器通常是指一个类,通过该类必须实现与该事件类型相对应的接口。
注:事件监听器接口类名称与事件名称相对应。如:MouseEvent—— MouseListener
(三)事件适配器类
某些事件监听接口有对应的事件适配器类。通过事件适配器类,我们可以更简单地实现事件监听,从而缩短程序代码。
java.awt.event包中定义的事件适配器类包括以下七个:
MouseAdapter(鼠标适配器)、MouseMotionAdapter(鼠标运动适配器)、KeyAdapter(键盘适配器)、WindowAdapter(窗口适配器)、ComponentAdapter(组件适配器)、ContainerAdapter(容器适配器)、FocusAdapter(焦点适配器)
(四)观察者模式
定义对象间的一对多依赖关系,当一方的对象改变状态时所有的依赖着都会得到通知并自动更新。
观察者模式中任意数目的观察者不必知道彼此的存在。这种状态使代码具有较好的可重用性。
1. Subject(主题)
提供注册和注销观察者的接口
2. Observer(观察者)
为需要在主题变化时获得通知的对象定义一个更新接口。
3. ConcreteSubject(具体主题)
主题接口的一个实现类
4. ConcreteObserver(具体观察者)
观察者接口的实现类
三.Swing
Swing:用于开发Java应用程序用户界面的开发工具包
Swing控件可跨平台运行。
独立于本地平台的Swing控件称为轻量级控件,依赖于本地平台的AWT控件称为重量级控件。
工具包中所有的包都是以swing作为名称的,如:
javax.swing,javax.swing.event
swing组件的层次框架图:
(图片源自海通网校)
创建图形界面的主要步骤:
1.导入Swing包
2.设置顶层容器
3.设置按钮和标签等Swing组件
4.将组件添加至容器中
5.处理事件
例:
(图片源自海同网校)
具体操作方法参照记事本实例。
代码如下:
packagecom.iotek.swing;
importjava.awt.BorderLayout;
importjava.awt.Container;
importjava.awt.Dimension;
importjava.awt.FileDialog;
importjava.awt.Frame;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JDialog;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTextArea;
/**
* Created by asus on 2017/2/15.
*记事本实例
*/
public classNotePadDemo{
public static void main(String[] args){
newMyFrame("记事本");
}
}
classMyFrameextendsJFrame{
privateJTextAreatv_area=null;
privateJScrollPanes_pane=null;//带滚动条的面板
privateJMenuBarmb=null;//菜单栏
privateJMenum_file=null;//文件菜单
privateJMenum_help=null;//帮助菜单
privateJMenuItemf_item_new=null;//文件菜单的菜单项(子菜单):新建
privateJMenuItemf_item_open=null;//文件菜单的菜单项(子菜单):打开
privateJMenuItemf_item_exit=null;//文件菜单的菜单项(子菜单):退出
privateJMenuItemf_item_about=null;//文件菜单的菜单项(子菜单):关于
publicMyFrame(Stringtitle) {
super(title);
init();
registerListener();
}
//初始化相关的组件
private void init() {
tv_area=newJTextArea();
s_pane=newJScrollPane(tv_area);
//在需要时出现水平滚动条
s_pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
Containercpane=this.getContentPane();
cpane.add(s_pane,BorderLayout.CENTER);
this.setSize(500,500);//设置窗体大小
//初始化菜单
mb=newJMenuBar();//新建菜单
m_file=newJMenu("文件");//新建文件菜单和其菜单项
f_item_new=newJMenuItem("新建");
f_item_open=newJMenuItem("打开");
f_item_exit=newJMenuItem("退出");
m_file.add(f_item_new);
m_file.add(f_item_open);
m_file.add(f_item_exit);
m_help=newJMenu("帮助");//新建帮助菜单和其菜单项
f_item_about=newJMenuItem("关于");
m_help.add(f_item_about);
mb.add(m_file);//将文件菜单与帮助菜单添加到菜单栏上
mb.add(m_help);
//把菜单栏添加到窗体中
this.setJMenuBar(mb);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口的时候退出应用程序
//设置窗口在屏幕当中居中显示
//定义一个工具包
Toolkittoolkit=Toolkit.getDefaultToolkit();
DimensionscreenSize=toolkit.getScreenSize();//获得屏幕尺寸信息
intscreenWidth=screenSize.width;//获得当前屏幕宽度
intscreenHeight=screenSize.height;//获得当前屏幕度
intwindowWidth=this.getWidth();//获得当前窗体宽度
intwindowHeight=this.getHeight();//获得当前窗体高度
this.setLocation((screenWidth-windowWidth)/2, (screenHeight-windowHeight)/2);//使屏幕居中
this.setVisible(true);//显示窗体
}
//给相关组件设置事件监听器
private void registerListener() {
f_item_new.addActionListener(e -> newFile());
f_item_open.addActionListener(e->openFile());
f_item_exit.addActionListener(e->exitFile());
f_item_about.addActionListener(e->aboutFile());
}
private void newFile() {
if(!tv_area.getText().equals("")) {
intres=JOptionPane.showConfirmDialog(null,"是否保存?",this.getTitle(),JOptionPane.YES_NO_CANCEL_OPTION);
if(res==JOptionPane.YES_OPTION) {
//弹出文件保存对话框
FileDialogfd=newFileDialog(this,"保存文件",FileDialog.SAVE);
fd.setVisible(true);
}else{
tv_area.setText("");//清空记事本中内容
}
}
}
//打开记事本格式文件
private void openFile(){
FileDialogof=newFileDialog(this,"打开文件",FileDialog.LOAD);
of.setVisible(true);
}
//退出
private void exitFile(){
if(!tv_area.getText().equals("")) {
intres=JOptionPane.showConfirmDialog(null,"是否保存?",this.getTitle(),JOptionPane.YES_NO_CANCEL_OPTION);
if(res==JOptionPane.YES_OPTION) {
//弹出文件保存对话框
FileDialogfd=newFileDialog(this,"保存文件",FileDialog.SAVE);
fd.setVisible(true);
}else{
tv_area.setText("");//清空记事本中内容
}
}
//退出程序
System.exit(0);
}
//关于
private void aboutFile(){
AboutDialogaboutDialog=newAboutDialog(this,"about",true);
}
}
- java之GUI
- Java GUI之JButton
- Java GUI之GraphicsEnvironment
- JAVA之GUI
- Java之GUI编程
- java 之GUI
- java基础之GUI
- java基础之GUI
- Java基础之GUI
- JAVA之GUI
- Java之GUI
- java之GUI!!!
- Java GUI之JMenuBar
- Java GUI之JDialog
- Java GUI之JTextArea
- Java GUI之ActionListener
- Java GUI之KeyListener
- java基础之GUI
- PIC单片机-PWM波
- 有关inputstream流只能读取一次的问题
- 2016HCTF giligili writeup
- (14)Air Band OpenCV2.4.13_基础作图
- 2017zctf misc300
- Java之GUI
- C++ string类 详细用法
- “空”的艺术-当数据为空时显示什么
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined)
- ubuntu下安装nfs服务器
- 中规模实现组合逻辑函数(两种)
- SQL Server 行列相互转换命令:PIVOT和UNPIVOT使用详解
- C++之继承(多重继承+多继承+虚继承+虚析构函数+重定义)
- matplotlib-3D绘图