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();