Java笔记(八)
GUI:
awt和swing:
java.awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属于重量级控件。
javax.swing:在awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属于轻量级控件。
创建图形化界面:
(1)创建Frame窗体;
(2)对窗体进行基本设置。如:大小、位置、布局;
(3)定义组件;
(4)将组件通过窗体的add方法添加到窗体中;
(5)让窗体显示,通过setVisible(true)。
事件监听机制的特点:
(1)事件源
(2)事件
(3)监听器
(4)事件处理
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不止一个)都封装到了监听器中。
以上三者,在Java中都定义好了,直接获取其对象来用就可以。我们只要对产生的动作进行处理。
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class Demo{
//定义该图形中的所需组件的引用
private Frame f;
private Button b;
Demo(){
init();
}
public void init(){
f = new Frame("my frame"); //对frame进行基本设置
f.setBounds(300, 200, 300, 200);
f.setLayout(new FlowLayout()); b = new Button("按钮"); //将组件添加到frame中
f.add(b); //加载一下窗体上的事件
myEvent(); //显示窗体
f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); //让按钮具备退出程序的功能
//此时按钮就是事件源,想要知道哪个组件具备什么样的特有监听器,需要查看该组件对象的功能,通过查阅button的描述,
//发现按钮支持一个特有监听addActionListener
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
}
public static void main(String[] args){
new Demo();
}
}
鼠标事件:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class Demo{
private Frame f;
private Button b;
Demo(){
init();
}
public void init(){
f = new Frame("my frame"); f.setBounds(300, 200, 300, 200);
f.setLayout(new FlowLayout()); b = new Button("按钮"); f.add(b); myEvent(); f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
b.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入该组件");
} public void mouseClicked(MouseEvent e){
if(e.getClickCount() == 2)
System.out.println("双击动作");
}
});
}
public static void main(String[] args){
new Demo();
}
}
键盘事件:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class Demo{
private Frame f;
private Button b;
private TextField tf;
Demo(){
init();
}
public void init(){
f = new Frame("my frame"); f.setBounds(300, 200, 300, 200);
f.setLayout(new FlowLayout()); tf = new TextField(20); b = new Button("按钮"); f.add(b);
f.add(tf); myEvent(); f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); //添加键盘监听
b.addKeyListener(new KeyAdapter(){
// public void keyPressed(KeyEvent e){
// //按“ESC”键,程序退出
// if(e.getKeyCode() == KeyEvent.VK_ESCAPE)
// System.exit(0);
// } //Ctrl+回车键,使程序退出
public void keyPressed(KeyEvent e){
if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER)
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();
}
}
});
}
public static void main(String[] args){
new Demo();
}
}
例:列出指定目录内容:
import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File; public class Demo{
private Frame f;
private Button b;
private TextField tf;
private TextArea ta;
private Dialog d;
private Label label;
private Button okBut;
Demo(){
init();
}
public void init(){
f = new Frame("练习");
f.setBounds(300, 100, 600, 500);
f.setLayout(new FlowLayout()); b = new Button("转到"); tf = new TextField(60);
ta = new TextArea(25, 70); //参数为true,表明必须先操作Dialog
d = new Dialog(f, "提示信息-self", true);
d.setBounds(400, 200, 240, 150);
d.setLayout(new FlowLayout());
label = new Label();
okBut = new Button("确定");
d.add(label);
d.add(okBut); f.add(tf);
f.add(b);
f.add(ta); myEvent(); f.setVisible(true);
}
public void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
showDir();
}
}); d.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
d.setVisible(false);
}
}); okBut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
d.setVisible(false);
}
}); tf.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_ENTER){
showDir();
}
}
});
} private void showDir(){
String dirPath = tf.getText();
File file = new File(dirPath);
if(file.exists() && file.isDirectory()){
tf.setText("");
String[] names = file.list();
for(String name : names){
ta.append(name + "\r\n");
}
}
else{
String info = "您输入的信息: " + dirPath + "是错误的。请重新输入!";
label.setText(info);
d.setVisible(true);
}
} public static void main(String[] args) {
new Demo();
}
}
菜单:
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class Demo{
private Frame f;
private MenuBar mb;
private Menu m, subMenu;
private MenuItem closeItem, subItem; Demo(){
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("子菜单");
closeItem = new MenuItem("退出");
subItem = new MenuItem("子条目"); subMenu.add(subItem);
m.add(subMenu);
m.add(closeItem);
mb.add(m);
f.setMenuBar(mb); myEvent(); f.setVisible(true);
} public void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); closeItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}); } public static void main(String[] args) {
new Demo();
}
}
如图:

打开保存文件:
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class Demo{
private Frame f;
private Menu fileMenu;
private MenuItem openItem, saveItem, closeItem;
private MenuBar bar;
private FileDialog openD, saveD;
private TextArea ta;
private File file;
Demo(){
init();
} public void init(){
f = new Frame("练习");
f.setBounds(300, 100, 650, 600); bar = new MenuBar();
ta = new TextArea();
openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
closeItem = new MenuItem("退出");
fileMenu = new Menu("文件"); fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu);
f.setMenuBar(bar);
f.add(ta); openD = new FileDialog(f, "打开文件", FileDialog.LOAD);
saveD = new FileDialog(f, "保存文件", FileDialog.SAVE); myEvent(); f.setVisible(true);
} public void myEvent(){
//窗口关闭
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); //点击“退出”条目,退出程序
closeItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}); //打开选中的文件,显示在TextArea中
openItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
openD.setVisible(true);
String dirPath = openD.getDirectory();
String fileName = openD.getFile();
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");
}
}catch(IOException ex){
throw new RuntimeException("读取失败!");
} }
}); //保存文件
saveItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(file == null){
saveD.setVisible(true);
String dirPath = openD.getDirectory();
String fileName = openD.getFile();
if(dirPath == null || fileName == null)
return;
file = new File(dirPath, fileName);
}
try{
BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
String s = ta.getText();
bufw.write(s);
bufw.flush();
bufw.close();
}catch(IOException ex){
throw new RuntimeException("保存失败!");
}
}
}); } public static void main(String[] args) {
new Demo();
}
}
Java笔记(八)的更多相关文章
- Java笔记(八)……数组
数组的概念 同一种类型数据的集合.其实数组就是一个容器. 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素. 数组的格式 元素类型[] 数组名 = new 元素类型[个数]; int[ ...
- Java IO学习笔记八:Netty入门
作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...
- Java学习笔记四:Java的八种基本数据类型
Java的八种基本数据类型 Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. Java基本类型共有八种,基本类型可以分为三类,字符类型char,布 ...
- Java 笔记 —— java 和 javac
Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...
- 《Java笔记——基础语法》
Java笔记--基础语法 一.字符串的拼接: 例如: System.out.println(""+""); 二.换行语句: 例如: Syst ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9360993 作者:七十一雾央 新浪微博:http:// ...
- java笔记00-目录
--2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:
- Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Elasticsearch笔记八之脑裂
Elasticsearch笔记八之脑裂 概述: 一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点所以无论访问那个节点都可以查看集群的状态信息. 而脑 ...
随机推荐
- How to create a freehand tool
http://forums.esri.com/Thread.asp?c=159&f=1707&t=283694&mc=1 http://blog.sina.com.cn/s/b ...
- Android自己定义实现循环滚轮控件WheelView
首先呈上效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- 关于Gradle配置的小结
前言 使用 Android Studio 来开发 Android 工程的过程中,接触 Gradle 是不可避免的,比如配置签名.引入依赖等.那么 Gradle 到底是什么东西呢? Gradle 是一个 ...
- NHibernate剖析:Mapping篇之Mapping-By-Code(1):概览
ModelMapper概述 NHibernate3.2版本号集成Mapping-By-Code(代码映射),其设计思想来源于ConfORM.代码总体构思基于"Loquacious" ...
- php如何读取ini文件
很多时候,我们使用配置文件来读取配置,那么php如何使用ini文件呢? 代码如下: 例如将:数据库信息存到ini文件中,进行读取. <?php header('content-type:text ...
- 3.nginx反向代理服务器+负载均衡
nginx反向代理服务器+负载均衡 用nginx做反向代理和负载均衡非常简单, 支持两个用法: 1个proxy, 1个upstream,分别用来做反向代理,和负载均衡 以反向代理为例, nginx不自 ...
- JS中Float类型加减乘除 修复 JQ 操作 radio、checkbox 、select LINQ to SQL:Where、Select/Distinct LINQ to SQL Count/Sum/Min/Max/Avg Join
JS中Float类型加减乘除 修复 MXS&Vincene ─╄OvЁ &0000027─╄OvЁ MXS&Vincene MXS&Vincene ─╄Ov ...
- 自己定义UITextField
目的是实现例如以下的效果: UITextField的leftView是自己定义的UIView,当中: 1.包括一个居中显示的icon.而且上,左,下各有1px的间隙 2.左上和左下是圆角,右边没有圆角 ...
- C++入门一
C++ 项目结构 Resource Files: 项目引用的位图文件,图标,窗口,光标等.比如,你的程序要生成一个exe文件,而文件的图标是你自定义的图标,那就要在这个工程里面添加Icon资源,添加一 ...
- HDFS源代码分析(二)-----元数据备份机制
前言 在Hadoop中,全部的元数据的保存都是在namenode节点之中,每次又一次启动整个集群,Hadoop都须要从这些持久化了的文件里恢复数据到内存中,然后通过镜像和编辑日志文件进行定期的扫描与合 ...