Java面向对象 GUI 补录
Java面向对象 GUI 补录
知识概要:(1)GUI和CLI
(2)AWT和SWING
(3)AWT继承关系图
(4)布局管理器
(5)创建一个简单的窗体
(6)事件监听机制的构成
(7)熟悉键盘事件、鼠标事件、按钮事件
(8)AWT练习:查找指定目录
(9)AWT之Menu
(10)记事本程序实例
(1)
GUI(图形用户界面)
GUI
• Graphical User Interface(图形用户接口)。
• 用图形的方式,来显示计算机操作的界面,这样更方便更直
观。
CLI
• Command line User Interface (命令行用户接口)
• 就是常见的Dos命令行操作。
• 需要记忆一些常用的命令,操作不直观。
举例:
• 比如:创建文件夹,或者删除文件夹等
Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
(2)
Awt和Swing
Awt与Swing
• java.Awt :Abstract Window ToolKit (抽象窗口
工具包),需要调用本地系统方法实现功能。属
重量级控件。
• javax.Swing :在AWT的基础上,建立的一套图
形界面系统,其中提供了更多的组件,而且完全
由Java实现。增强了移植性,属轻量级控件。
(3)
(4)
(5)创建一个简单的窗体
<span style="font-size:18px;"> import java.awt.*;
import java.awt.event.*; /*
创建图形化界面:
1,创建frame窗体。
2,对窗体进行基本设置。
比如大小,位置,布局。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
5,让窗体显示,通过setVisible(true) 事件监听机制的特点:
1,事件源。
2,事件。
3,监听器。
4,事件处理。 事件源:就是awt包或者swing包中的那些图形界面组件。 事件:每一个事件源都有自己特有的对应事件和共性事件。 监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。 以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了。 我们要做的事情是,就是对产生的动作进行处理。 */
class AwtDemo
{
public static void main(String[] args)
{
Frame f = new Frame("my awt");
f.setSize(500,400);
f.setLocation(300,200);
f.setLayout(new FlowLayout()); Button b = new Button("我是一个按钮"); f.add(b); f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.out.println("我关");
System.exit(0);
}
public void windowActivated(WindowEvent e)
{
System.out.println("我活了。"); } public void windowOpened(WindowEvent e)
{
System.out.println("我被打开了,hahahhahah");
} }); f.setVisible(true); //System.out.println("Hello World!");
}
}
/* class MyWin implements WindowListener
{
//覆盖7个方法。可以我只用到了关闭的动作。
//其他动作都没有用到,可是却必须复写。 } //因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。
//并覆盖了其中的所有方法。那么我只要继承自Windowadapter覆盖我需要的方法即可。
class MyWin extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
//System.out.println("window closing---"+e.toString());
System.exit(0);
}
} */ //练习,定义一个窗体,在窗体中添加一个按钮具备关闭该窗体的功能。
</span>
事件监听机制组成
事件源(组件)
事件(Event)
监听器(Listener)事件处理(引发事件后处理方式)
事件监听机制
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该
事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的
子类XXXAdapter的子类对象。
一般用匿名内部类来表示。
在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量
接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括
事件源对象。通过getSource()或者,getComponent()获取。)
import java.awt.*;
import java.awt.event.*;
class FrameDemo
{
//定义图形中所需组件的引用
private Frame f ;
private Button but; FrameDemo()
{
init();
} public void init()
{
f = new Frame("窗口");
//对frame进行基本设置
f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); but = new Button("my button"); //将组件添加到fram中
f.add(but);
//添加窗口的事件
myEvent();
//添加按钮事件
buttonEvent(); //显示窗口
f.setVisible(true); }
private void buttonEvent()
{
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("退出,按钮干的事情");
System.exit(0);
}
});
}
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
//让按钮具备退出程序的功能
/*
按钮就是事件源
那么选择哪个监听器呢?
通过关闭窗体示例了解到。想要知道哪个组件具备什么样的监听器
*/
});
}
public static void main(String[] args)
{
new FrameDemo();
} }
(7)鼠标、键盘、按钮事件的了解
import java.awt.*;
import java.awt.event.*; class MouseAndKeyEvent
{
private Frame f;
private Button but;
private TextField tf; MouseAndKeyEvent()
{
init();
} public void init()
{
f = new Frame("my frame"); f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout()); tf = new TextField(20); but = new Button("my button"); f.add(tf);
f.add(but); myEvent(); f.setVisible(true); }
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}); tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))
{
System.out.println(code+".....是非法的");
e.consume();
} }
}); //给But添加一个键盘监听。
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
//System.exit(0);
System.out.println("ctrl+enter is run"); //System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
}
}); /*
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("action ok");
}
});
*/ /* but.addMouseListener(new MouseAdapter()
{
private int count = 1;
private int clickCount = 1;
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入到该组件"+count++);
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
System.out.println("双击动作"+clickCount++);
}
});
*/
} public static void main(String[] args)
{
new MouseAndKeyEvent();
}
}
(8)AWT练习
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindowDemo
{
private Frame f;
private TextField tf;
private Button but;
private TextArea ta; private Dialog d;
private Label lab;
private Button okBut; MyWindowDemo()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout()); tf = new TextField(60); but = new Button("转到"); ta = new TextArea(25,70); d = new Dialog(f,"提示信息-self",true);
d.setBounds(400,200,240,150);
d.setLayout(new FlowLayout());
lab = new Label();
okBut = new Button("确定"); d.add(lab);
d.add(okBut); f.add(tf);
f.add(but);
f.add(ta); myEvent();
f.setVisible(true);
}
private void myEvent()
{ okBut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);
}
});
d.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
d.setVisible(false);
}
}); tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
showDir();
}
}); but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
showDir(); }
}); f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
} private void showDir()
{
String dirPath = tf.getText(); File dir = new File(dirPath); if(dir.exists() && dir.isDirectory())
{
ta.setText("");
String[] names = dir.list();
for(String name : names)
{
ta.append(name+"\r\n");
}
}
else
{
String info = "您输入的信息:"+dirPath+"是错误的。请重输";
lab.setText(info);
d.setVisible(true);
}
} public static void main(String[] args)
{
new MyWindowDemo();
}
}(9)
import java.awt.*;
import java.awt.event.*; class MyMenuDemo
{ private Frame f;
private MenuBar mb;
private Menu m,subMenu;
private MenuItem closeItem,subItem; MyMenuDemo()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout()); mb = new MenuBar(); m = new Menu("文件"); subMenu = new Menu("子菜单"); subItem = new MenuItem("子条目");
closeItem = new MenuItem("退出"); subMenu.add(subItem); m.add(subMenu);
m.add(closeItem);
mb.add(m); f.setMenuBar(mb); myEvent(); f.setVisible(true); }
private void myEvent()
{ closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
} public static void main(String[] args)
{
new MyMenuDemo();
}
}(10)简单记事本程序的实现
package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*; public class MyMenuTest
{ private Frame f;
private MenuBar bar;
private TextArea ta;
private Menu fileMenu;
private MenuItem openItem,saveItem,closeItem; private FileDialog openDia,saveDia; private File file;
MyMenuTest()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,650,600); bar = new MenuBar(); ta = new TextArea(); fileMenu = new Menu("文件"); openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
closeItem = new MenuItem("退出"); fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu); f.setMenuBar(bar); openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);
saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE); f.add(ta);
myEvent(); f.setVisible(true); }
private void myEvent()
{ saveItem.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e)
{
if(file==null)
{
saveDia.setVisible(true); String dirPath = saveDia.getDirectory();
String fileName = saveDia.getFile();
if(dirPath==null || fileName==null)
return ;
file = new File(dirPath,fileName);
} try
{
BufferedWriter bufw = new BufferedWriter(new FileWriter(file)); String text = ta.getText(); bufw.write(text);
//bufw.flush();
bufw.close();
}
catch (IOException ex)
{
throw new RuntimeException();
} }
}); openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openDia.setVisible(true);
String dirPath = openDia.getDirectory();
String fileName = openDia.getFile();
// System.out.println(dirPath+"..."+fileName);
if(dirPath==null || fileName==null)
return ; ta.setText("");
file = new File(dirPath,fileName); try
{
BufferedReader bufr = new BufferedReader(new FileReader(file)); String line = null; while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
} bufr.close();
}
catch (IOException ex)
{
throw new RuntimeException("读取失败");
} }
}); closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
} public static void main(String[] args)
{
new MyMenuTest();
}
} /*
如何制作可以双击执行的jar包呢?
1,将多个类封装到了一个包(package)中。
2,定义一个jar包的配置信息。
定义一个文件a.txt 。文件内容内容为:
Main-Class:(空格)包名.类名(回车)
3,打jar包。
jar -cvfm my.jar a.txt 包名
4,通过winrar程序进行验证,查看该jar的配置文件中是否有自定义的配置信息。 5,通过工具--文件夹选项--文件类型--jar类型文件,通过高级,定义该jar类型文件的打开动作的关联程序。
jdk\bin\javaw.exe -jar 6,双击试试!。哦了。 */
Java面向对象 GUI 补录的更多相关文章
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- Java面向对象的多态
Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...
- Java面向对象 正则表达式
Java面向对象 正则表达式 知识概要: (1)正则表达式的特点 (2)正则表达的匹配 (3)正则表达式的切割,替换,获取 (4)正则表达式的练习 正则表达式:符合 ...
- 实验二 Java面向对象程序设计 20175301李锦然实验报告
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- Java面向对象程序设计
北京电子科技学院(BESTI) 实 ...
- 20155212 实验二 Java面向对象程序设计
20155212 实验二 Java面向对象程序设计 单元测试 三种代码 用编程去解决问题,必须学会写三种码: 伪代码 产品代码 测试代码 例: MyUtil 类解决一个百分制成绩转成"优.良 ...
- 20155319 实验二 Java面向对象程序设计
20155319 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 (一) ...
- 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告
2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...
- Java面向对象——相关基本定义
Java面向对象——相关基本定义 摘要:本文简单介绍了面向对象的编程方式,以及与之有关的一些基本定义. 面向对象 什么是面向对象 面向对象编程是一种对现实世界建立计算机模型的一种编程方法.简称OOP( ...
随机推荐
- jQuery中getJSON跨域原理详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp28 jQuery中getJSON跨域原理详解 前几天我再开发一个叫 河蟹工 ...
- 开始学习.net的第二天
今天由于原因上午没上课.下午去了学的.net的表格. <body></body><img src="../temp/新建文件夹/64aab4ae3e632dbc ...
- 个人作业1——四则运算题目生成程序(基于java)
项目代码: https://git.coding.net/YJh_/11.git 题目要求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:/ + / = / 运算符为 +, −, ×, ...
- 201521123062《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 for (int i = 0; i < list.size(); ...
- 手写Maven的archetype项目脚手架
一.背景 maven是一个很好的代码构建工具,采用“约定优先于配置”的原则进行项目管理,相信很多的java开发者应该都了解maven并可能在工作当中都是通过maven来管理项目的,在创建的项目的时候, ...
- Android Studio不更新到最新版使用Kotlin
第一步:安装Kotlin插件 打开Settings面板,找到Plugins选项,点击Browse repositories(浏览仓库),输入“Kotlin”查找,然后安装即可.安装完成之后需要重启An ...
- 深度学习(一)cross-entropy softmax overfitting regularization dropout
一.Cross-entropy 我们理想情况是让神经网络学习更快 假设单模型: 只有一个输入,一个神经元,一个输出 简单模型: 输入为1时, 输出为0 神经网络的学习行为和人脑差的很多, 开始学习 ...
- Excel表科学记数法的数字和文本的转换
一,科学记数法的数字转换文本类型: 1,还未有数据,先选中列或者单元格 右键单击->设置单元格格式->文本->确定 2,已有数据,先选中列或者单元格 右键单击->设置单元格格式 ...
- svn清理失败且乱码 问题解决
由于昨天在网络不好的状态下频繁尝试svn更新,导致今天svn更新时出现:清理失败且乱码的情况如下: 以下是解决方案:1.下载sqlite3.exe ,地址为:http://download.csdn. ...
- 【机器学习实战】Machine Learning in Action 代码 视频 项目案例
MachineLearning 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远 Machine Learning in Action (机器学习实战) | ApacheCN(apa ...