1.Java圖形界面編程
2.AWT、佈局管理器、事件模型,
3.JFC、Swing編程。應用JBuilder快速開發圖形界面程序部分略去。
詳細內容:
1.AWT(Abstract Window Toolkit)
AWT抽象窗口工具包,SUN公司提供的用於圖形界面編程(GUI)的類庫。基本的AWT庫處理用戶界面元素的方法是把這些元素的創建和行爲委託給每個目標平臺上(Windows、Unix、Macintosh等)的本地GUI工具進行處理。例如:如果我們使用AWT在一個Java窗口中放置一個按鈕,那麼實際上使用的是一個具有本地外觀和感覺的按鈕。這樣,從理論上來說,我們所編寫的圖形界面程序能運行在任何平臺上,做到了圖形界面程序的跨平臺運行。
2.佈局管理器容器裏組件的位置和大小是由佈局管理器來決定的。容器對佈局管理器的特定實例保持一個引用。當容器需要定位一個組件時,它將調用佈局管理器來完成。當決定一個組件的大小時,也是如此。在AWT中,給我們提供了五種佈局管理器:BorderLayou、 FlowLayout、GridLayout、 CardLayout、GridBagLayout
我們可以通過設置空佈局管理器,來控制組件的大小和位置。調用setLayout(null)。
java佈局測試代碼如下:
- //java佈局測試代碼
- import java.awt.BorderLayout;
- import java.awt.Button;
- import java.awt.CardLayout;
- import java.awt.Color;
- import java.awt.FlowLayout;
- import java.awt.Frame;
- import java.awt.GridLayout;
- import java.awt.Panel;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- public class YourFrame extends Frame
- {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private Panel boderPanel;
- private Panel flowPanel;
- private Panel gridPanel;
- private Panel cardPanel;
- //事件監聽類
- class YourWindowListener extends WindowAdapter
- {
- }
- //框架類
- public YourFrame(String strTitle)
- {
- super(strTitle);
- setSize(600,400);
- setLocation(100, 100);//設置起始位置
- setBorderLayoutPanel();
- setFlowLayoutPanel();
- setGridPanel();
- setCardLayout();
- Color cl = new Color(0, 255, 0);
- setBackground(cl);
- setLayout(new GridLayout(2,2));
- add(boderPanel);
- add(flowPanel);
- add(gridPanel);
- add(cardPanel);
- addWindowListener( new YourWindowListener()
- {
- public void windowClosing(WindowEvent arg0) {
- // TODO Auto-generated method stub
- System.exit(0);
- }
- });
- }
- //BorderLayout佈局
- public void setBorderLayoutPanel()
- {
- boderPanel=new Panel();
- boderPanel.setLayout(new BorderLayout());
- Button btn1 = new Button("Center");
- Button btn2 = new Button("East");
- Button btn3 = new Button("South");
- Button btn4 = new Button("West");
- Button btn5 = new Button("North");
- boderPanel.add(btn1, BorderLayout.CENTER);
- boderPanel.add(btn2, BorderLayout.EAST);
- boderPanel.add(btn3, BorderLayout.SOUTH);
- boderPanel.add(btn4, BorderLayout.WEST);
- boderPanel.add(btn5, BorderLayout.NORTH);
- }
- //FlowLayout佈局
- public void setFlowLayoutPanel()
- {
- flowPanel=new Panel();
- flowPanel.setLayout(new FlowLayout());
- Button btn1 = new Button("Java Button Test ");
- //更改標籤字符串
- btn1.addActionListener( new YourActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- ((Button)e.getSource()).setLabel("Button Pressed");
- }
- });
- Button btn2 = new Button("Frame");
- flowPanel.add(btn1);
- flowPanel.add(btn2);
- }
- //GridLayout佈局
- public void setGridPanel()
- {
- gridPanel=new Panel();
- gridPanel.setLayout(new GridLayout(2,2));
- Button btn1 = new Button("one");
- Button btn2 = new Button("two");
- Button btn3 = new Button("three");
- Button btn4 = new Button("four");
- gridPanel.add(btn1);
- gridPanel.add(btn2);
- gridPanel.add(btn3);
- gridPanel.add(btn4);
- }
- //CardLayout佈局
- public void setCardLayout()
- {
- final CardLayout cl=new CardLayout();
- cardPanel=new Panel();
- cardPanel.setLayout(cl);
- Button btn1 = new Button("黑桃A");
- Button btn2 = new Button("紅桃K");
- 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");
- }
- @SuppressWarnings("deprecation")
- public static void main(String[] args)
- {
- YourFrame yf=new YourFrame("Frame Test");
- yf.show();
- }
- }
- class YourActionListener implements ActionListener
- {
- @Override
- public void actionPerformed(ActionEvent arg0)
- {
- // TODO Auto-generated method stub
- }
- }
//java佈局測試代碼
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class YourFrame extends Frame
{
/**
*
*/
private static final long serialVersionUID = 1L;
private Panel boderPanel;
private Panel flowPanel;
private Panel gridPanel;
private Panel cardPanel;
//事件監聽類
class YourWindowListener extends WindowAdapter
{
}
//框架類
public YourFrame(String strTitle)
{
super(strTitle);
setSize(600,400);
setLocation(100, 100);//設置起始位置
setBorderLayoutPanel();
setFlowLayoutPanel();
setGridPanel();
setCardLayout();
Color cl = new Color(0, 255, 0);
setBackground(cl);
setLayout(new GridLayout(2,2));
add(boderPanel);
add(flowPanel);
add(gridPanel);
add(cardPanel);
addWindowListener( new YourWindowListener()
{
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
System.exit(0);
}
});
}
//BorderLayout佈局
public void setBorderLayoutPanel()
{
boderPanel=new Panel();
boderPanel.setLayout(new BorderLayout());
Button btn1 = new Button("Center");
Button btn2 = new Button("East");
Button btn3 = new Button("South");
Button btn4 = new Button("West");
Button btn5 = new Button("North");
boderPanel.add(btn1, BorderLayout.CENTER);
boderPanel.add(btn2, BorderLayout.EAST);
boderPanel.add(btn3, BorderLayout.SOUTH);
boderPanel.add(btn4, BorderLayout.WEST);
boderPanel.add(btn5, BorderLayout.NORTH);
}
//FlowLayout佈局
public void setFlowLayoutPanel()
{
flowPanel=new Panel();
flowPanel.setLayout(new FlowLayout());
Button btn1 = new Button("Java Button Test ");
//更改標籤字符串
btn1.addActionListener( new YourActionListener()
{
public void actionPerformed(ActionEvent e)
{
((Button)e.getSource()).setLabel("Button Pressed");
}
});
Button btn2 = new Button("Frame");
flowPanel.add(btn1);
flowPanel.add(btn2);
}
//GridLayout佈局
public void setGridPanel()
{
gridPanel=new Panel();
gridPanel.setLayout(new GridLayout(2,2));
Button btn1 = new Button("one");
Button btn2 = new Button("two");
Button btn3 = new Button("three");
Button btn4 = new Button("four");
gridPanel.add(btn1);
gridPanel.add(btn2);
gridPanel.add(btn3);
gridPanel.add(btn4);
}
//CardLayout佈局
public void setCardLayout()
{
final CardLayout cl=new CardLayout();
cardPanel=new Panel();
cardPanel.setLayout(cl);
Button btn1 = new Button("黑桃A");
Button btn2 = new Button("紅桃K");
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");
}
@SuppressWarnings("deprecation")
public static void main(String[] args)
{
YourFrame yf=new YourFrame("Frame Test");
yf.show();
}
}
class YourActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent arg0)
{
// TODO Auto-generated method stub
}
}
運行效果如下圖所示:
Events(事件):描述發生了什麼的對象。
Event source(事件源):事件的產生器。
Event handlers(事件處理器):接收事件對象、解釋事件對象並處理用戶交互的方法。
事件模型圖解如下:
- import java.awt.FileDialog;
- import java.awt.Frame;
- import java.awt.Menu;
- import java.awt.MenuBar;
- import java.awt.MenuItem;
- import java.awt.TextArea;
- import java.awt.TextField;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- public class HisFrame extends Frame
- {
- /**
- *
- */
- class HisWindowListener extends WindowAdapter
- {
- }
- private static final long serialVersionUID = 1L;
- /**
- * @param args
- */
- HisFrame(String strtitle)
- {
- super(strtitle);
- final HisFrame hf=this;
- setSize(400, 400);
- setLocation(100,100);
- //TextField tf=new TextField("",20);
- final TextArea ta=new TextArea();
- add(ta);
- addWindowListener( new HisWindowListener()
- {
- public void windowClosing(WindowEvent arg0) {
- // TODO Auto-generated method stub
- System.exit(0);
- }
- });
- //創建目錄工具欄
- MenuBar mb=new MenuBar();
- //創建菜單和菜單項
- Menu mFile=new Menu("File");
- MenuItem mFile1=new MenuItem("New");
- MenuItem mFile2=new MenuItem("Open");
- //響應菜單命令
- mFile2.addActionListener(new ActionListener()
- {
- @SuppressWarnings("deprecation")
- public void actionPerformed(ActionEvent e)
- {
- FileDialog fd=new FileDialog(hf,"Open File",FileDialog.LOAD);
- fd.show();
- String strFile=fd.getDirectory()+fd.getFile();
- //取得文件
- if(!strFile.isEmpty())
- {
- try
- {
- FileInputStream fis=new FileInputStream(strFile);
- byte[] buf=new byte[3000];
- int len=fis.read(buf);
- String str=new String(buf,0,len);
- ta.append(str);
- }
- catch (FileNotFoundException e1)
- {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- catch (IOException e2) {
- // TODO Auto-generated catch block
- e2.printStackTrace();
- }
- }
- }
- });
- MenuItem mFile3=new MenuItem("Save");
- MenuItem mFile4=new MenuItem("Save As");
- MenuItem mFile5=new MenuItem("Exit");
- mFile5.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- System.exit(0);
- }
- });
- mFile.add(mFile1);
- mFile.add(mFile2);
- mFile.add(mFile3);
- mFile.add(mFile4);
- mFile.add(mFile5);
- mb.add(mFile);
- Menu mEdit=new Menu("Edit");
- MenuItem mEdit1=new MenuItem("Undo");
- MenuItem mEdit2=new MenuItem("Copy");
- MenuItem mEdit3=new MenuItem("Cut");
- MenuItem mEdit4=new MenuItem("Replace");
- mEdit.add(mEdit1);
- mEdit.add(mEdit2);
- mEdit.add(mEdit3);
- mEdit.add(mEdit4);
- mb.add(mEdit);
- setMenuBar(mb);
- }
- public static void main(String[] args)
- {
- // TODO Auto-generated method stub
- HisFrame hf=new HisFrame("java Frame");
- hf.show();
- }
- }
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class HisFrame extends Frame
{
/**
*
*/
class HisWindowListener extends WindowAdapter
{
}
private static final long serialVersionUID = 1L;
/**
* @param args
*/
HisFrame(String strtitle)
{
super(strtitle);
final HisFrame hf=this;
setSize(400, 400);
setLocation(100,100);
//TextField tf=new TextField("",20);
final TextArea ta=new TextArea();
add(ta);
addWindowListener( new HisWindowListener()
{
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
System.exit(0);
}
});
//創建目錄工具欄
MenuBar mb=new MenuBar();
//創建菜單和菜單項
Menu mFile=new Menu("File");
MenuItem mFile1=new MenuItem("New");
MenuItem mFile2=new MenuItem("Open");
//響應菜單命令
mFile2.addActionListener(new ActionListener()
{
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e)
{
FileDialog fd=new FileDialog(hf,"Open File",FileDialog.LOAD);
fd.show();
String strFile=fd.getDirectory()+fd.getFile();
//取得文件
if(!strFile.isEmpty())
{
try
{
FileInputStream fis=new FileInputStream(strFile);
byte[] buf=new byte[3000];
int len=fis.read(buf);
String str=new String(buf,0,len);
ta.append(str);
}
catch (FileNotFoundException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
}
});
MenuItem mFile3=new MenuItem("Save");
MenuItem mFile4=new MenuItem("Save As");
MenuItem mFile5=new MenuItem("Exit");
mFile5.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
mFile.add(mFile1);
mFile.add(mFile2);
mFile.add(mFile3);
mFile.add(mFile4);
mFile.add(mFile5);
mb.add(mFile);
Menu mEdit=new Menu("Edit");
MenuItem mEdit1=new MenuItem("Undo");
MenuItem mEdit2=new MenuItem("Copy");
MenuItem mEdit3=new MenuItem("Cut");
MenuItem mEdit4=new MenuItem("Replace");
mEdit.add(mEdit1);
mEdit.add(mEdit2);
mEdit.add(mEdit3);
mEdit.add(mEdit4);
mb.add(mEdit);
setMenuBar(mb);
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
HisFrame hf=new HisFrame("java Frame");
hf.show();
}
}
程序運行效果如下圖所示:4.Java基礎類
JFC(Java Foundation Classes):Java基礎類,是關於GUI組件和服務的完整集合,主要包含5個API:AWT、Java2D、Accessibility、Drag & Drop、Swing。JFC提供了幫助開發人員設計複雜應用程序的一整套應用程序開發包。
Java2D是一套圖形API,它爲Java應用程序提供了一套高級的有關二維(2D)圖形圖像處理的類。Java2D API擴展了java.awt和java.awt.image類,並提供了豐富的繪圖風格,定義了複雜圖形的機制和精心調節繪製過程的方法和類。這些API使得獨立於平臺的圖形應用程序的開發更加簡便。
Accessibility API提供了一套高級工具,用以輔助開發使用非傳統輸入和輸出的應用程序。它提供了一個輔助的技術接口,如:屏幕閱讀器,屏幕放大器,聽覺文本閱讀器(語音處理)等等。
Drag & Drop技術提供了Java和本地應用程序之間的互操作性,用來在Java應用程序和不支持Java技術的應用程序之間交換數據。
JFC模塊的重點在Swing。Swing用來進行基於窗口的應用程序開發,它提供了一套豐富的組件和工作框架,以指定GUI如何獨立於平臺地展現其視覺效果。 利用swing包中類建立界面程序測試代碼如下:
- import javax.swing.*;
- public class SwingTest
- {
- @SuppressWarnings("deprecation")
- public static void main(String[] args)
- {
- JFrame jf=new JFrame("JFrame");
- jf.setSize(300, 400);
- jf.show();
- jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
- JButton jb=new JButton("Javax.swing");
- jf.getContentPane().add(jb);
- }
- }
import javax.swing.*;
public class SwingTest
{
@SuppressWarnings("deprecation")
public static void main(String[] args)
{
JFrame jf=new JFrame("JFrame");
jf.setSize(300, 400);
jf.show();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
JButton jb=new JButton("Javax.swing");
jf.getContentPane().add(jb);
}
}
//運行效果如下圖所示: