Java图形界面编程
AWT
AWT(Abstract Window Toolkit),抽象窗口工具包,SUN公司提供的用于图形界面编程(GUI)的类库。基本的AWT库处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台上(Windows、Unix、Macintosh等)的本地GUI工具进行处理。例如:如果我们使用AWT在一个Java窗口中放置一个按钮,那么实际上使用的是一个具有本地外观和感觉的按钮。这样,从理论上来说,我们所编写的图形界面程序能运行在任何平台上,做到了图形界面程序的跨平台运行。
布局管理器
1) 容器里组件的位置和大小是由布局管理器来决定的。容器对布局管理器的特定实例保持一个引用。当容器需要定位一个组件时,它将调用布局管理器来完成。当决定一个组件的大小时,也是如此。
2) 在AWT中,给我们提供了五种布局管理器:
BorderLayout、FlowLayout、GridLayout、CardLayout、GridBagLayout
AWT事件模型
1) Events(事件):描述发生了什么的对象。
2) Event source(事件源):事件的产生器。
3) Event handlers(事件处理器):接收事件对象、解释事件对象并处理用户交互的方法。
事件监听器
实现了监听器接口的类。一个监听器对象是一个实现了专门的监听器接口的类的实例。
如增加窗口监听,实现按关闭按钮时退出,WindowAdapter为一个空实现了WindowListener接口的抽象类,故其不能直接用new来创建对象,可以通过匿名类来实现,在中间重写windowClosing方法:
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
如对按钮增加单击事件监听:当点击按钮Welcome时,将显示为Hello。
Button btn1=new Button("Welcome");
btn1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
((Button)e.getSource()).setLabel("Hello");
}
});
对于CardLayout布局管理器,可以通过增加事件监听器来实现卡片式翻动:
Panel cardPanel=new Panel();
Button btn1=new Button("North");
Button btn2=new Button("South");
final CardLayout cl=new CardLayout();
cardPanel.setLayout(cl);
ActionListener al=new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
cl.next(cardPanel);
}
};
btn1.addActionListener(al);
btn2.addActionListener(al);
cardPanel.add(btn1,"1");
cardPanel.add(btn2,"2");
菜单及打开、保存对话框
先创建菜单栏MenuBar,在创建菜单Menu,最后创建菜单项MenuItem,然后把菜单项加到菜单上,把菜单加到菜单栏上,最后用setMenuBar把菜单栏加到Frame上。
为打开菜单项增加事件监听器,创建打开文件对话框,然后通过TextArea来显示打开的文件内容。
final Frame f=new Frame("MenuBarTest");
f.setSize(600,400);
f.setLocation(100,100);
MenuBar mb=new MenuBar();
Menu mn1=new Menu("File");
Menu mn2=new Menu("Edit");
MenuItem m1=new MenuItem("new");
MenuItem m2=new MenuItem("open");
MenuItem m3=new MenuItem("save");
MenuItem m4=new MenuItem("exit");
MenuItem m5=new MenuItem("copy");
MenuItem m6=new MenuItem("paste");
final TextArea ta=new TextArea();
f.add(ta);
m2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
FileDialog fd=new FileDialog(f,"打开文件对话框",FileDialog.LOAD);
fd.show();
// getDirectory()获得对话框打开目录的路径,str即打开文件的完整路径
String str=fd.getDirectory()+fd.getFile();
if(str!=null)
{
try
{
FileInputStream fis=new FileInputStream(str);
byte []buf=new byte[10*1024];
int len=fis.read(buf);
ta.append(new String(buf,0,len));
fis.close();
}
catch(Exception ex)
{
ex.printStackTrace();
} } }
});
m3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
FileDialog fd=new FileDialog(f,"保存文件对话框",FileDialog.SAVE);
fd.show();
}
});
m4.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
mn1.add(m1);
mn1.add(m2);
mn1.add(m3);
mn1.add(m4);
mn2.add(m5);
mn2.add(m6);
mb.add(mn1);
mb.add(mn2);
f.setMenuBar(mb);
f.show();