------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
GUI
GUI : Graphical User Interface(图形用户接口)
用图形的方式,来显示计算机操作的界面,这样更方编直观。
CLI: Command line User Interfac(命令行用户接口)
最常见的Dos命令行操作。 需要记忆一些常用的命令,操作不直观。
Java为GUI提供的对象都存在java.awt和javax.swing两个包中。
Awt和Swing
java.awt: Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能,属于重量级控件。
javax.swing : 在awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
继承关系图:
布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
FlowLayout(流式布局管理器):从左到右的顺序排列 Panel默认的布局管理器
BorderLayout(边界布局管理器) 东,南,西,北,中 Frame默认的布局管理器
GridLayout (网格布局管理器) 规则的矩阵
CardLayout(卡片布局管理器) 选项卡
GridBagLayout(网格包布局管理器) 非规则的矩阵
Frame介绍:是带有标题和边框的顶层窗口。
构造方法:Frame(String title) 构造一个新的、最初不可见的、具有指定标题的Frame对象
常用方法:public Component add(Component comp) 将指定组件追加到此容器的尾部。
public void setSize(int width,int height) 调整组件的大小,使其宽度为width
,高度为 height
。
public void setLocation(int x , int y) 将组件移到新位置。通过此组件父级坐标空间中的 x
和y
参数来指定新位置的左
上角。
public void setBounds(int x , int y , int width, int height) 移动组件并调整其大小。由 x
和 y
指定左上角的新位置,由 width
和 height
指定新的大小。
public void setVisible(boolean b) 根据参数 b
的值显示或隐藏此组件。
Frame小练习:
package GUI;
import java.awt.*;
import java.awt.event.*;
public class FrameDemo {
public static void main(String[] args) {
//创建Frame对象
Frame f = new Frame("awt demo");
//设置Frame大小
f.setSize(500,400);
//设置Frame位置
f.setLocation(300, 200);
//为Frame指定布局器
f.setLayout(new FlowLayout());
//为Frame添加监听
f.addWindowListener(new WindowAdapter(){
//窗口激活监听
public void windowActivated(WindowEvent e){
System.out.println("window Activated");
}
//窗口打开监听
public void windowOpened(WindowEvent e){
System.out.println("window opened");
}
//窗口关闭监听
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//设置窗口可见
f.setVisible(true);
}
}
事件监听
事件监听的组成:
事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)
事件监听流程图:
事件监听的特点:
事件源;就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器: 将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。
以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。我们要做的事情是,就是对产生的动作进行处
理。
练习窗口监听:
package GUI;
import java.awt.*;
import java.awt.event.*;
public class FrameDemo_2 {
//把窗口的初始化和事件的监听放到构造函数中
FrameDemo_2(){
init();
myEvent();
}
private Frame f = null;
private Button b = null;
//初始化窗口 按钮
public void init(){
f = new Frame("my Frame");
b = new Button("my Button");
f.add(b);
f.setBounds(300, 200, 600, 500);
f.setLayout(new FlowLayout());
f.setVisible(true);
}
//事件监听
public void myEvent(){
//为窗口添加事件监听 抽口关闭功能
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//为按钮添加事件监听 按键关闭功能
b.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("退出,按钮干的!");
System.exit(0);
}
});
}
public static void main(String[] args) {
new FrameDemo_2();
}
}
键盘和鼠标事件:
package GUI;
import java.awt.*;
import java.awt.event.*;
public class MouseAndKeyDemo {
MouseAndKeyDemo(){
init();
myEvent();
}
private Frame f = null;
private Button b = null;
TextField tf = null;
//初始化窗口 按钮
public void init(){
f = new Frame("my Frame");
b = new Button("my Button");
tf =new TextField(20);
f.add(b);
f.add(tf);
f.setBounds(300, 200, 600, 500);
f.setLayout(new FlowLayout());
f.setVisible(true);
}
//事件监听
public void myEvent(){
//为窗口添加事件监听
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//**********************************************************
//键盘事件
//判断组合键Ctrl和Enter
b.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
System.out.println("Ctrl和ENTER 被按下");
}
});
//屏蔽键
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();
}
}
});
//*********************************************************
//鼠标事件
b.addMouseListener(new MouseAdapter(){
int count = 1;
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 MouseAndKeyDemo();
}
}
Dialog:对话框
构造方法:Dialog(Frame owner, String title, boolean modal) 构造一个最初不可见的Dialog
,它带有指定的所有者
Frame
、标题和模式。
FileDialog :显示一个对话框窗口,用户可以从中选择文件。
构造方法:FileDialog(Frame parent , String title, int mode) 创建一个具有指定标题的文件对话框窗口,用于加载或
保存文件。
常用方法:String getFile() 获取此文件对话框的选定文件。
String getDirectory() 获取此文件对话框的目录。
列出指定目录的文件:
package GUI;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyWindowDemo {
//构造函数
MyWindowDemo(){
init();
}
//定义组件
private Frame f ;
private TextField tf;
private Button b ;
private TextArea ta;
private Dialog d;
private Label lab;
private Button bok;
//初始化组件
public void init(){
//基本设置
f = new Frame("my window");
f.setBounds(300, 200, 600, 500);
f.setLayout(new FlowLayout());
b = new Button("转到");
tf = new TextField(60);
ta = new TextArea(25,70);
//添加组件
f.add(tf);
f.add(b);
f.add(ta);
//Dialog基本设置
d = new Dialog(f,"提示消息",true);
d.setBounds(300, 200, 200, 100);
d.setLayout(new FlowLayout());
lab = new Label();
bok = new Button("确定");
//为Dialog添加组件
d.add(lab);
d.add(bok);
//事件
myEvent();
//窗体显示
f.setVisible(true);
}
//添加事件
public void myEvent(){
//为tf文本框添加键盘监听 输入目录完毕后按回车可以实现跳转功能
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);
}
});
//为bok按钮添加动作监听 bok按钮关闭对话框功能
bok.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
d.setVisible(false);
}
});
//为f窗口天剑监听 窗体关闭功能
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//为b按钮天剑动作监听 为b按钮添加显示目录功能
b.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
showDir(); //显示目录
}
});
}
//显示目录
private void showDir() {
String Dirpath = tf.getText();//获得父目录
File Dir = new File(Dirpath);//获得文件名
//如果文件存在且是一个目录
if(Dir.exists()&& Dir.isDirectory()){
String[] names = Dir.list();//获取目录下的文件名
ta.setText("");//清空TextArea
for(String name: names){
ta.append(name+"\r\n");//TextArea添加目录下的文件名
}
}else{//如果不是目录 或者目录不存在 显示对话框
//输出信息
String Info = "您输入的目录"+Dirpath+"是错误的,请重新输入";
lab.setText(Info);//设置lab的值
//对话框可见
d.setVisible(true);
}
}
public static void main(String[] args) {
new MyWindowDemo();
}
}
菜单
Menu:菜单,继承MenuItem;有右三角的图标存在,可添加Menu和MenuItem
MenuBar:菜单栏,可添加菜单和菜单条目。一般先创建菜单栏,再创建菜单。
MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项。
菜单的事件处理和组件一样,可以对类型为MenuItem和Menu的对象这个事件源添加活动监听ActionListener,并进行相关的事件理。
通过setMenuBar()方法,将菜单添加到Frame中。
小练习:
package GUI;
import java.awt.*;
import java.awt.event.*;
public class MyMenuDemo {
//构造函数
MyMenuDemo(){
init();
}
//组件
private Frame f ;
private MenuBar mb ;
private Menu m,subMenu;
private MenuItem closedItem,subItem;
//初始化组件
public void init(){
f = new Frame("My Menu");
f.setBounds(300, 200, 600, 500);
mb = new MenuBar();//创建菜单栏
m = new Menu("文件");
subMenu = new Menu("子菜单");//创建菜单
closedItem = new MenuItem("退出");//创建菜单项
subItem = new MenuItem("子条目");
//把菜单栏添加到窗体
f.setMenuBar(mb);
//为菜单栏添加组件
mb.add(m);
m.add(subMenu);
m.add(closedItem);
subMenu.add(subItem);
myEvent();
f.setVisible(true);
}
//添加事件
public void myEvent(){
//为窗口添加监听事件 菜单具备关闭时间
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//为退出菜单项添加动作监听 窗体关闭功能
closedItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new MyMenuDemo();
}
}
具有打开和保存功能的简单记事本程序:
package GUI;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MenuText {
MenuText(){
init();
}
//定义组件
private Frame f;
private MenuBar mb;
private Menu m;
private MenuItem openItem,closeItem,saveItem;
private FileDialog openDia ,saveDia;
private TextArea ta ;
private File fi;
//初始化组件
public void init(){
f = new Frame("My Text");//初始化窗体
mb = new MenuBar();//初始化菜单栏
m = new Menu("文件");//初始化菜单
openItem = new MenuItem("打开");//初始化打开菜单
saveItem = new MenuItem("保存");//初始化保存菜单
closeItem = new MenuItem("关闭");//初始化关闭菜单
//把菜单栏添加到窗体中
f.setMenuBar(mb);
//把菜单添加到菜单栏中
mb.add(m);
//把菜单项添加到菜单中
m.add(openItem);
m.add(saveItem);
m.add(closeItem);
f.setBounds(300, 200, 600, 500);
openDia = new FileDialog(f,"我的打开",FileDialog.LOAD);//打开文件对话框
saveDia = new FileDialog(f,"我的关闭",FileDialog.SAVE);//保存文件对话框
//文本输入区域
ta = new TextArea();
f.add(ta);
myEvent();//事件监听
f.setVisible(true);//设置窗体可见
}
//添加监听
private void myEvent() {
//为关闭菜单项添加事件 使该菜单具备关闭窗体功能
closeItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
//窗口监听 窗体关闭功能
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//打开菜单栏动作监听 打开文件功能
openItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
openDia.setVisible(true);//设置文件打开窗口可见
String Dir = openDia.getDirectory();//获得目录
String file = openDia.getFile();//获得文件名
if(Dir==null || file ==null){
return;
}
fi = new File(Dir,file);//新建文件对象
ta.setText("");//将TextArea置空
//读取文件
try{
//带缓冲的输入流
BufferedReader br = new BufferedReader(
new FileReader(fi));
String line = null;
while((line = br.readLine()) != null){
ta.append(line+"\r\n");//添加到TextArea区域中
}
br.close();//关闭流
}catch(IOException e){
throw new RuntimeException("文件读取失败");
}
}
});
//保存菜单项添加动作监听 保存文件功能
saveItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
//判断 如果文件不存在 跳出保存对话框 并新建文件
if(fi == null){
saveDia.setVisible(true);//设置文件保存对话框可见
String Dir = saveDia.getDirectory();//获取目录
String file = saveDia.getFile();//获取文件名
if(Dir ==null || file==null){//如果点击取消 结束方法
return;
}
fi = new File(Dir,file);//创建文件
}
//往文件中写数据
try{
//带缓冲的输出流
BufferedWriter bw = new BufferedWriter(
new FileWriter(fi));
//获取TextArea区域的文本数据
String data = ta.getText();
//写
bw.write(data);
//关闭流
bw.close();
}catch(IOException e){
throw new RuntimeException("保存失败");
}
}
});
}
public static void main(String[] args) {
new MenuText();
}
}