---------------------------------------------- android培训、java培训、期待与您交流! -----------------
Java GUI是Java的图形化表现方式。
GUI有两个组件:AWT和Swing
AWT:抽象窗口工具包,需要调用本地系统方法实现功能,属重量级空间;
Swing:在AWT的基础上,简历的一套图形界面系统,其中提供了更多组件,而且完全
由Java实现,增强了可移植性,属于轻量级控件;
------------------------------------------------------------------------------
GUI布局:常见的布局管理器有:FllowLayout(流式):从左到右(Panel默认流式)
BorderLayout(边界):东南西北中(Frame默认边界)
GridLayout(网格):规则矩阵
GraidBaglayout(网格包):非规则矩阵
每次点击组件都会产生一个相应的效果,需要监听机制监听事件是否发生,并作出相应的处理动作。
事件监听机制组成:事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)
--------------------------------------------------------------------------------
下面创建一个窗口,具备加载文件,书写文件,保存文件的功能,并具有关闭功能!
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyMenuWithSave{
private Framef; //创建一个Frame引用
privateMenuBar bar; //创建一个菜单条引用
privateTextArea ta; //创建一个文本区域引用
private MenufileMenu;//创建一个菜单引用
private MenuItemopenItem,saveItem,closeItem;//创建三个子菜单
privateFileDialog openDia,saveDia; //创建两文本对话框引用,分别用来打开和保存文件
private Filefile; //创建一个文件引用,用于保存写好的文件
MyMenuWithSave() {
init(); //初始化菜单
}
publicvoid init() { //初始化方法
f = newFrame("my window"); //创建一个Frame实例对象并命名
f.setBounds(300,100,500,600); //设置Frame的位置,分别为距离屏幕的左边距离,距离屏幕的上边距离,Frame的长和宽
//f.setLayout(newFlowLayout());
bar = newMenuBar(); //创建一个菜单条实例
ta = newTextArea();//创建一个文本区实例
fileMenu= new Menu("文件"); //创建一个菜单实例并命名
openItem= new MenuItem("打开"); //创建一个子菜单实例并命名
saveItem= new MenuItem("保存"); //创建一个子菜单实例并命名
closeItem= new MenuItem("退出");//创建一个子菜单实例并命名
fileMenu.add(openItem);//将创建好的子菜单添加到菜单中去
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu); //将菜单添加到菜单条
f.setMenuBar(bar);//将菜单条添加到Frame中
openDia =new FileDialog(f,"我要打开",FileDialog.LOAD); //创建文本对话框实例对象并命名,调用相应的方法
saveDia =new FileDialog(f,"我要保存",FileDialog.SAVE);
f.add(ta);//将文本区添加到框架
myEvent();//调用对应的监听机制
f.setVisible(true);//设置框架可见
}
private voidmyEvent() {
saveItem.addActionListener(newActionListener() { //保存文件的动作监听器,
publicvoid actionPerformed(ActionEvent e){
if(file==null){
saveDia.setVisible(true);//设置保存对话框可见
StringdirPath = saveDia.getDirectory(); //设置中保存的路径
StringfileName = saveDia.getFile(); //设置保存的文件名
if(dirPath==null|| fileName==null) //判断文件名和保存路径方是否为空
return;
file= new File(dirPath,fileName); //不为空,创建文件实例
}
try{
BufferedWriterbufw = new BufferedWriter(new FileWriter(file));
Stringtext = ta.getText();
bufw.write(text);
//bufw.flush();
bufw.close();
}catch(IOException e1){
thrownew RuntimeException();
}
}
});
openItem.addActionListener(newActionListener(){ //打开文件的动作监听器
publicvoid actionPerformed(ActionEvent e){
openDia.setVisible(true);//设置打开对话框可见
StringdirPath = openDia.getDirectory(); //打开文件的路径
StringfileName = openDia.getFile(); //打开文件的文件名
System.out.println(dirPath+"...."+fileName);
if(dirPath==null|| fileName==null) //判断是否为空
return;
file= new File(dirPath,fileName);
try{
BufferedReaderbufr = new BufferedReader(new FileReader(file)); //将打开的文件写入文本区
Stringline = null;
while((line=bufr.readLine())!= null) {
ta.append(line+"\r\n");
}
bufr.close();
}catch(IOException e1){
thrownew RuntimeException("读取失败!");
}
}
});
closeItem.addActionListener(newActionListener() { //菜单里的退出选项的动作监听器
publicvoid actionPerformed(ActionEvent e){
System.exit(0);
}
});
f.addWindowListener(newWindowAdapter(){ //Frame里的退出选项的动作监听器,就是红色X键
publicvoid windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public staticvoid main(String[] args)
{
newMyMenuWithSave();
}
}
总结:Java的GUI需要先清楚具体的物理布局,将相应的组件逐步添加到上级组件中,在调用相应的监听器只想相应的动作!