①GUI:GraphicalUser Interface,即图形用户界面,用于计算机与用户交互的一种方式。用图形的方式,来显示计算机操作的界面,这样更方便更直观。
②java将这种界面封装为对象,放在了两个包中:java.Awt包和javax.Swing包。
①什么是布局管理器?容器中的组件的排放方式,就是布局。
②常见的布局管理器
import java.awt.*;
class FrameDemo{
public static void main(String[] args){
Frame f = new Frame("my frame");
f.setSize(500, 400);
f.setLocation(400, 200);
f.setBounds(400, 200, 500, 400);
f.setLayout(new FlowLayout());//设置流式布局
Button but = new Button("一个按钮");
f.add(but);//将按钮添加到窗体中。
f.setVisible(true);
}
}
运行截图:
①事件监听机制的组成:
确定事件源(容器或组件)
通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
一般用匿名内部类来表示。在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
import java.awt.*;
import java.awt.event.*;
class FrameTest
{
public static void main(String[] args)
{
//创建窗体
Frame f = new Frame("我的窗体");
//对窗体进行基本设置
f.setBounds(400,300,350,300);
f.setLayout(new FlowLayout());
//创建按钮对象
Button b = new Button("关闭");
//将按钮加入窗体中
f.add(b);
//设置窗体可见
f.setVisible(true);
//为窗体注册监听器
f.addWindowListener(new MyWindowAdapter() );
//为按钮注册活动监听,使用匿名内部类
//因为ActionListener接口只有一个方法,所以不需有适配器。
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("按钮关闭窗口");
System.exit(0);
}
});
}
}
2、事件监听器4、常用事件分类
①窗体事件(WindowEvent)
②动作事件(ActionEvent)
③鼠标事件(MouseEvent)
④键盘事件(KeyEvent)
/*
鼠标事件和键盘事件演示
使鼠标点击x能关闭窗口
使键盘也具备关闭窗口功能
*/
import java.awt.*;
import java.awt.event.*;
class MouseAndKeyTest
{
private Frame f;
private Button b;
private TextField tf;
MouseAndKeyTest()
{
init();
}
//定义方法,初始化窗体同时对其进行基本设置
public void init()
{
f = new Frame("我的窗体");
b = new Button("按钮");
tf = new TextField(10);
//设置窗体
f.setBounds(400,300,600,500);
f.setLayout(new FlowLayout());
//添加文本框
f.add(tf);
//添加按钮
f.add(b);
f.setVisible(true);
event();
}
//为窗体注册监听器,为了代码规范性,将其进行封装
public void event()
{
//添加窗体监听器
f.addWindowListener(new WindowAdapter()
{
//关闭窗体功能
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//为按钮添加鼠标监听
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+++"次");
}
});
//为按钮添加键盘监听
b.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
//获取键盘上的字符及其整数值
System.out.println(e.getKeyChar()+":"+e.getKeyCode());
System.out.println(e.getKeyText(e.getKeyCode())+":"+e.getKeyCode());
//组合建的使用,使按钮也具备关闭窗口功能
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
{
System.out.println("contral+enter"+"关闭窗口");
System.exit(0);
}
}
});
//鼠标活动事件
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("动啦!!");
}
});
//为文本区域注册键盘监听器
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
//让键盘只接受数字,当输入的不是数字,不添加进文本区域
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_1 && code<=KeyEvent.VK_9))
{
System.out.println(code+"非法字符");
e.consume();//不按默认方式处理事件
}
}
});
}
public static void main(String[] args)
{
new MouseAndKeyTest();
}
}
①常用构造方法:Dialog(Frame owner,String title,boolean modal):构造一个最初不可见的 Dialog,它带有指定的所有者 Frame、标题和模式(为true时,对话框不关闭,Frame不能操作)。
②子类FileDialog(文本对话框)
a、常用构造方法
FileDialog(Dialog parent, String title, int mode): 创建一个具有指定标题的文件对话框窗口,用于加载或保存文件。
b、常用方法
①菜单组建构成图
②菜单组件概述
/*
需求:在窗体中列出指定目录内容,当指定目录不存在,弹出提示窗口。
思路:
1.创建窗体,对其进行基本设置。
2.创建Button,TextFiled,TextArea对象,并加入窗体中
3.分别对以上容器注册监听器
4.当当指定目录不存在,弹出Diolog窗口。
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class TextTest
{
private Frame f;
private Button b;
private TextField tf;
private TextArea ta;
private Dialog d;
private Button okBut;
private Label lab;
TextTest()
{
init();
}
public void init()
{
//创建窗体对象和其内部对象
f = new Frame("我的窗体");
b = new Button("转到");
tf = new TextField(60);
ta = new TextArea(20,65);
//创建对话框对象
d = new Dialog(f,"文件资源管理器",true);
lab = new Label("您输入的信息:"+"路径不存在!");
okBut = new Button("确定");
d.setBounds(300,200,300,200);
d.setLayout(new FlowLayout());
d.add(lab);
d.add(okBut);
f.setBounds(300,200,600,500);
f.setLayout(new FlowLayout());
f.add(tf);
f.add(b);
f.add(ta);
f.setVisible(true);
event();
}
public void event()
{
//为窗体注册窗体监听
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//为按钮注册活动监听,触发事件则显示目录
b.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();
}
});
//为对话框的按钮添加活动监听
okBut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);//隐藏对话框
}
});
}
//定义方法,显示目录
public void showDir()
{
String dirPath = tf.getText();
File dir = new File(dirPath);
if(dir.exists() && dir.isDirectory())
{
ta.setText("");
String[] files = dir.list();//列出当前目录的文件对象的名称,listFiles会把绝对路径列出来。
for(String f: files)
{
ta.append(f.toString()+"\r\n");
}
}
else//如果目录不存在,弹出对话框提示
{
String info = "您输入的信息:"+dirPath+"路径不存在!";
lab.setText(info);
d.setVisible(true);//这行一定放在最后,否则不能显示label的文本
}
}
public static void main(String[] args)
{
new TextTest();
}
}
怎样才能通过图形化操作的方式的打开我们制作的图形化程序呢?这就需要将class文件打包了。步骤如下:
①首先要在java文件中导入一个包,没有则需创建一个包,如package myfile;
②生成包:通过编译javac -d f:\\ SaveFile.java (将包存放在f盘)此时则在f盘下的myfile文件夹下生成了所有的.class文件
③在此目录下新建一个文件,如1.txt或者其他任意名称任意扩展名的文件都可,然后在其中编辑固定的格式:“Main-Class: myfile.SaveFile”,只写引号中的内容。需要需要在冒号后有一个空格,在文件末尾要回车。
④编译:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,则直接编译jar即可得出相应的命令
⑤此时双击即可执行。
①在固定格式中:
②jar文件必须在系统中注册,才能运行。注册方法如下: