GUI
GUI
Graphical User Interface(图形用户接口)
用图形的方式,来显示计算机操作的界面这样更方便更直观。
CLI
Command line User Interface(命令行用户接口)
就是常见的Dos命令行操作。
需要记忆一些常用的记忆,操作不直观。
java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。
Awt:
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件
对平台依赖性强,跨平台性差
Swing:
javax.Swing:在Awt基础上,建立的一套图形界面系统
其中提供了更多的组件,而且完全由java实现,增强了移植性,属于轻量级控件
对平台依赖性不大,跨平台性强
Eclipse使用的是Eclipse开发小组独立编写的图形化界面Swt
也是基于Awt基础上开发出来的
创建图形化界面:
1,创建flame窗体 。
2,对窗体进行基本设置(大小,位置,布局,颜色) 。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中 5,让窗体显示,通过setVisible(true)
事件监听机制的特点:
1,事件源
2,事件
3,事件监听器
4,事件处理
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己的特有对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不止一个)都已经封装到了监听器中。
以上三者在java中都已经定义好了,直接获取其对象使用即可 我们要做的事,就是对产生的动作进行处理。
package day22;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class AwtDemo {
public static void main(String[] args) {
Frame f = new Frame("my awt");
f.setSize(300, 200);
f.setLocation(500, 300);
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("我被打开了");
}
});
f.setVisible(true);
}
}
让按钮具备退出程序的功能
按钮就是事件源 那么选择哪个监听器呢? 通过关闭窗体事例了解到:
想要知道哪个组件具备什么样的监听器, 需要查看该组件对象的功能。
通过查阅button的描述,发现按钮支持一个特有监听addActionListener。
package day22;
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 FrameDemo {
public static void main(String[] args) {
new FrameDemo();
}
private Frame f;
private Button but;
FrameDemo() {
init();
}
public void init() {
f = new Frame("my frame");
// 对frame进行基本设置
f.setBounds(500, 300, 300, 200);
f.setLayout(new FlowLayout());
but = new Button("退出");
// 将组件添加到frame中
f.add(but);
// 加载一下窗体上的事件
myEvent();
// 显示窗体
f.setVisible(true);
}
private void myEvent() {
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("按钮退出");
System.exit(0);
}
});
}
}
设置鼠标与键盘
package day22;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
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.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MouseAndKeyEvent {
private Frame f;
private Button but;
private TextField tf;
MouseAndKeyEvent() {
init();
}
public void init() {
f = new Frame("my frame");
f.setBounds(500, 300, 300, 200);
f.setLayout(new FlowLayout());
tf = new TextField(10);
but = new Button("确定");
f.add(tf);
f.add(but);
myEvent();
f.setVisible(true);
}
private void myEvent() {
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("退出");
System.exit(0);
}
});
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e){
if(!(e.getKeyCode()>=KeyEvent.VK_0 && e.getKeyCode()<=KeyEvent.VK_9)){
System.out.println(e.getKeyChar()+"是非法的");
e.consume();
}
}
});
// 给but添加一个键盘监听
but.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e){
// System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
/*if(e.getKeyCode()==KeyEvent.VK_ENTER)
System.exit(0);*/
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
System.out.println("control+enter is run");
}
});
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("action");
}
});
but.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入该组件");
}
public void mouseExited(MouseEvent e){
System.out.println("鼠标离开该组件");
}
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2)
System.out.println("双击动作");
// System.out.println("点击动作");
}
});
}
public static void main(String[] args) {
new MouseAndKeyEvent();
}
}
制作自己的对话框
该对话框用于查阅目录下的文件夹,
day22(9-10)
package day22;
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 MyWindowDemo {
private Frame f;
private TextField tf;
private Button but;
private TextArea ta;
private Dialog d;
private Label lab;
private Button butt;
public MyWindowDemo() {
init();
}
public void init() {
f = new Frame("My Window");
f.setBounds(300, 100, 400, 250);
f.setLayout(new FlowLayout());
d = new Dialog(f, "提示信息--self", true);
d.setBounds(400, 100, 300, 150);
d.setLayout(new FlowLayout());
lab = new Label("找不到文件路径");
butt = new Button("确定");
d.add(lab);
d.add(butt);
tf = new TextField(20);
but = new Button("转到");
ta = new TextArea(5, 50);
f.add(tf);
f.add(but);
f.add(ta);
myEvent();
f.setVisible(true);
}
private void myEvent() {
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
showDir();
}
});
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER)
showDir();
}
});
d.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
d.setVisible(false);
}
});
butt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
d.setVisible(false);
}
});
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();
}
}
制作菜单,包含子菜单,子条目
package day22;
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 MyMenuDemo {
private Frame f;
private MenuBar mb;
private Menu m, subm;
private MenuItem closeItem, subItem;
public MyMenuDemo() {
init();
}
public void init() {
f = new Frame("My Menu");
f.setBounds(300, 100, 400, 250);
f.setLayout(new FlowLayout());
mb = new MenuBar();
m = new Menu("文件");
subm = new Menu("子文件");
closeItem = new MenuItem("退出");
subItem = new MenuItem("子条目");
mb.add(m);
m.add(subm);
m.add(closeItem);
subm.add(subItem);
f.setMenuBar(mb);
f.setVisible(true);
myEvent();
}
private 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 MyMenuDemo();
}
}
打开与保存
在上例中添加打开文件与保存的功能,可以打开txt文件,并在文本区域中进行修改并保存。
package day22;
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 MyMenuDemo {
private Frame f;
private MenuBar mb;
private Menu m, subm;
private MenuItem closeItem, subItem, openItem, saveItem;
private FileDialog openfd, savefd;
private TextArea ta;
private File file;
public MyMenuDemo() {
init();
}
public void init() {
f = new Frame("My Menu");
f.setBounds(300, 100, 600, 450);
ta = new TextArea();
f.add(ta);
mb = new MenuBar();
m = new Menu("文件");
subm = new Menu("子文件");
closeItem = new MenuItem("退出");
subItem = new MenuItem("子条目");
openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
mb.add(m);
m.add(subm);
m.add(openItem);
m.add(saveItem);
m.add(closeItem);
subm.add(subItem);
f.setMenuBar(mb);
f.setVisible(true);
openfd = new FileDialog(f, "我要打开", FileDialog.LOAD);
savefd = new FileDialog(f, "我要保存", FileDialog.SAVE);
myEvent();
}
private 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);
}
});
//打开
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openfd.setVisible(true);
String dirPath = openfd.getDirectory();
String fileName = openfd.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 e2) {
throw new RuntimeException("打开失败");
}
}
});
//保存
saveItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(file==null){
savefd.setVisible(true);
String dirPath = savefd.getDirectory();
String fileName = savefd.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 e2) {
throw new RuntimeException("保存失败");
}
}
});
}
public static void main(String[] args) {
new MyMenuDemo();
}
}