GUI图形用户界面
GUI(图形用户界面):java.Awt(抽象窗口工具包) javax.Swing
Javax.Swing基于Awt,在任何系统下显示效果一样,增强了可移植性
布局管理器
FlowLayout(流式布局管理器)----à从左到右的顺序排列。这个是Panel默认的。
BorderLayout(边界布局管理器)--à东南西北中。这个是Frame默认的
GirLayout(网格布局管理器)----à选项卡(比较规则的)
GirdBagLayout(网格布局管理器)---à非规则的矩阵
事件监听机制:
1. 事件源:awt或Swing包中的组件
2. 事件:每个事件源都有自己的特有对应事件和共性事件
3. 监听器:将可以出发某一个事件的动作都已经封装到了监听器中。
继承关系图:
下面是模拟浏览器的一个例子
代码如下:
public class GUITest {
GUITest()
{
init();
}
private Frame frame;
private TextField tf;
private Button but;
private TextArea ta;
public void init()
{
frame=new Frame("我的浏览器");
frame.setBounds(150, 200,350, 350);
tf=new TextField(30);
but=new Button("转到");
ta=new TextArea(15,40);
frame.setLayout(new FlowLayout());
frame.add(tf);
frame.add(but);//把转到按钮添加到主窗体中
frame.add(ta);//把文本区域添加进去
frame.setVisible(true);//让窗体可见
MyEvent();
}
public void MyEvent()
{
//让窗体关闭的监听器
frame.addWindowListener(new WindowAdapter() { //
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//把目录中的内容添加到文本区域中
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String text = tf.getText();
ta.setText(text);
tf.setText(" ");
}
});
}
public static void main(String[] args) {
new GUITest();
}
}
运行结果:
下面例子是一个实现可以进行打开、保存、结束的一个窗口
代码如下:
public class GUITest2 {
GUITest2()
{
init();
}
private Frame f;
private MenuBar mb;
private Menu m;
private MenuItem mi, openmi,savemi,overmi;
private FileDialog openfd,savefd;
private TextArea ta;
private File file;
public void init()
{
f=new Frame("我的窗口");
f.setBounds(150, 200, 500, 400);
ta =new TextArea();
ta.setVisible(true);
mb=new MenuBar();
m=new Menu("文件");
mi=new MenuItem("子菜单");
openmi=new MenuItem("打开");
savemi=new MenuItem("保存");
overmi=new MenuItem("结束");
openfd=new FileDialog(f, "打开",FileDialog.LOAD);
savefd=new FileDialog(f, "保存",FileDialog.SAVE);
f.setVisible(true);
f.setMenuBar(mb);
f.add(ta);
mb.add(m);
m.add(mi);
m.add(openmi);
m.add(savemi);
m.add(overmi);
MyEvent();
}
private void MyEvent()
{
savemi.addActionListener(new ActionListener() {//保存监听机制
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generatedmethod stub
if(file==null)
{
savefd.setVisible(true);
String dir=savefd.getDirectory();
String name=savefd.getFile();
if(dir==null||name==null)
return;
file=new File(dir,name);
}
try {
BufferedWriter bufw=new BufferedWriter(new FileWriter(file));
String text=ta.getText();
bufw.write(text);
bufw.close();
} catch (IOException e1) {
// TODO Auto-generatedcatch block
e1.printStackTrace();
}
}
});
openmi.addActionListener(new ActionListener() {//打开监听机制
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generatedmethod stub
openfd.setVisible(true);
String dir=openfd.getDirectory();
String name=openfd.getFile();
if(dir==null||name==null)
return;
ta.setText(" ");
file=new File(dir, name);
try {
BufferedReader bufr=new BufferedReader(new FileReader(file));
String line=null;
while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
}
bufr.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generatedcatch block
e1.printStackTrace();
} catch (IOException e3) {
// TODO Auto-generatedcatch block
e3.printStackTrace();
}
}
});
f.addWindowListener(new WindowAdapter() { //关闭窗口事件监听
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
overmi.addActionListener(new ActionListener() {//关闭窗口事件监听
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new GUITest2();
}
}
运行结果为
总结:保存的主要思路是:运用IO流读取文本并把文本写到文件中,判断一个原来的那个文件存在不存在,如果存在就直接保存,如果不存在就弹出保存窗口,在保存。打开实际上就是读文本然后再把文本写到文本区域中。