GUI(图形用户界面)
Graphical User Interface(图形用户接口)
用图形的方式,来显示计算机操作的界面,这样更方便直观。
CLI
Command Line User Interface(命令行用户接口)
就是常见的Dos命令行操作。
需要记忆一些常用的命令,操作不直观。
Java为GUI提供的对象存在java.Awt和javax.Swing两个包中。
Awt与Swing的区别:
java.Awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。
属于重量级控件。
java.Swing:在Awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全有Java实现。
增强的移植行,属于轻量级控件。
布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
1,FlowLayout:流式布局管理器。从左向右排列,是Panel默认的布局管理器
2,BorderLayout:边界式布局管理器,东南西北中的排列方式,是Frame的默认布局管理器。如果窗体中只有一个组件,将会覆盖整个窗体。
3,GridLayout:网格式布局管理器,规则的矩阵
4,CardLayout:卡片式布局管理器,即选项卡
5,GridBayLayout:网格包布局管理器,非规则矩阵
创建图形化界面简单设置方法:
1,创建frame窗体;
2,对窗体进行进本设置;比如大小,位置,布局等。
3,定义组件;
4,将组件通过窗体的add方法添加到窗体中;
5,让窗体显示,通过setVisible(true)。
事件监听机制
特点:
1,事件源(组件):awt或swing包中的那些图形界面组件
2,事件:每一个事件源都有自己特有的对应事件和共性事件
3,监听器:将可触发某一事件的动作(不只一个动作),都封装到侦听器中
4,事件处理:引发事件后的处理方式。
前三者在java中都已经定义好,直接获取其对象来操作即可,我们需要做的事情是对产生的动作进行处理。
具体操作练习:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class FrameTest
{
private Frame f;
private TextField tf;
private Button bu;
private TextArea ta;
FrameTest()
{
init();
}
public void init()
{
f = new Frame("My Frame");//创建Frame窗体,并设置标题。
f.setBounds(300,100,500,400);//对窗体进行基本设置。
f.setLayout(new FlowLayout());//设定指定的布局管理器、
tf = new TextField(30);//定义组件,并设置属性
bu = new Button("转到");
ta =new TextArea(15,40);
f.add(tf);//将组件通过窗体的add()方法添加在窗体中
f.add(bu);
f.add(ta);
myEvent();
f.setVisible(true);//让窗体显示。
}
private void myEvent()//设定相关事件
{
bu.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
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");
}
}
}
});
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);//关闭窗口程序
}
});
}
public static void main(String[] args)
{
new FrameTest();
}
}
运行后的结果如图所示:
练习:利用Menu组件完成一个简单的记事本程序。
需求:具有文件菜单,文件中有打开,保存和退出功能。
import java.io.*;
import java.awt.*;
import java.awt.event.*;
class MenuTest
{
//定义组件引用
private Frame f;
private MenuBar mb;
private TextArea ta;
private Menu mu;
private MenuItem openItem,saveItem,closeItem;
private FileDialog openDia,saveDia;
private File file;
MenuTest()//定义构造函数
{
init();
}
public void init()//功能实现
{
f = new Frame("my test");
f.setBounds(300,100,500,600);
ta=new TextArea();
mb=new MenuBar();
mu=new Menu("File");
openItem=new MenuItem("open");
saveItem=new MenuItem("save");
closeItem=new MenuItem("close");
mu.add(openItem);//添加组件
mu.add(saveItem);
mu.add(closeItem);
mb.add(mu);
f.setMenuBar(mb);
openDia=new FileDialog(f,"my open",FileDialog.LOAD);
saveDia=new FileDialog(f,"my save",FileDialog.SAVE);
f.add(ta);
myEvent();//调用事件监听机制
f.setVisible(true);//显示窗体
}
private void myEvent()
{
saveItem.addActionListener(new ActionListener()//文件保存功能
{
public void actionPerformed(ActionEvent e)
{
if(file==null)
{
saveDia.setVisible(true);
String dir = openDia.getDirectory();
String fileName=openDia.getFile();
if(dir==null ||fileName==null)
return;
file = new File(dir,fileName);
}
try
{
BufferedWriter budw =new BufferedWriter(new FileWriter(file));
String text =ta.getText();
budw.write(text);
budw.close();
}
catch(IOException ex)
{
throw new RuntimeException("读取失败");
}
}
});
openItem.addActionListener(new ActionListener()//打开文件功能
{
public void actionPerformed(ActionEvent e)
{
openDia.setVisible(true);
String dir = openDia.getDirectory();
String fileName=openDia.getFile();
if(dir==null ||fileName==null)
return;
ta.setText("");//每次打开文件时,将文本区的内容清空
file = new File(dir,fileName);
try
{
BufferedReader budr =new BufferedReader(new FileReader(file));
String line =null;
while((line=budr.readLine())!=null)
{
ta.append(line+"\r\n");
}
budr.close();
}
catch(IOException ex)
{
throw new RuntimeException("读取失败");
}
}
});
closeItem.addActionListener(new ActionListener()//关闭功能
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
f.addWindowListener(new WindowAdapter()//窗体关闭功能
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args)
{
new MenuTest();
}
}
结果如图:
1195

被折叠的 条评论
为什么被折叠?



