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();
}
}

最新文章

  1. 机器人操作系统(ROS)教程4:ROS的框架【转】
  2. 异步get请求之代理方法
  3. bjui简单了解
  4. phonegap环境搭建
  5. AS3.0面向对象的写法,类和实例
  6. APP类别之比较与分析
  7. 如何更改mysql可执行路径及更改mysql数据库文件路径
  8. 发红包android
  9. javascript函数大全
  10. java框架注意
  11. css新增伪类
  12. 备份与还原mysql 数据库的常用命令。
  13. BOM 清除
  14. 创建物理卷报错Can&#39;t open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录
  15. VS Code 使用笔记
  16. duilib bkimage 属性
  17. 论文笔记 CVPR-2014 DeepReID Deep filter pairing neural network for person re-identification
  18. ZooKeeper(一)基本介绍
  19. OpenGL学习笔记(4) GLM库的使用
  20. IOS计算文字高度

热门文章

  1. linux查看 cpu及内存和硬盘使用情况的命令top
  2. 深入理解vue路由的使用
  3. Eclipse 教程
  4. LINUX下GDB反汇编和调试
  5. 简化动态MERGE的SQL计算
  6. LeetCode85 Maximal Rectangle java题解
  7. OpenGL 与 GLSL 版本号
  8. oracle ORA-06550
  9. git操作演示
  10. 爬虫框架_scrapy1