Java基礎總結之GUI圖形介面程式設計
GUI和CLI:
GUI:(Graphical User Interface)圖形使用者介面:用圖形的方式顯示計算機的操作介面。
CLI:(Command Line User Interface)命令列使用者介面:常見的Dos命令列操作。
awt和swing:
awt:(Abstract Windows ToolKit)抽象視窗工具包,需要呼叫本地系統方法實現功能,屬重量級控制元件。
swing:在awt的基礎上建立的一套圖形介面系統,屬於Javax擴充套件包下。其中提供了更多的元件。而且完全由Java實現增強了移植性,屬輕量級控制元件。
基本的GUI使用:(通過下面例項講解):
public class Demo { public static void main(String[] args) { // 建立視窗物件 Frame f = new Frame("這是一個視窗"); // 設定視窗的位置大小 f.setBounds(400, 200, 400, 300); // 設定窗口布局為流體佈局 f.setLayout(new FlowLayout()); // 建立Button按鈕 Button b = new Button(); Button b2 = new Button("Touch me"); b.setLabel("Click me"); // 將按鈕新增到視窗中 f.add(b); f.add(b2); // 建立選單欄 MenuBar mb = new MenuBar(); // 建立選單 Menu m = new Menu("File"); // 建立選單項 MenuItem mi = new MenuItem("quit"); // 選單項到選單 m.add(mi); // 新增選單到選單欄 mb.add(m); // 新增選單欄到視窗中 f.setMenuBar(mb); // 給視窗關閉事件新增監聽 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); // 給按鈕b新增監聽事件 b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("按鈕點選了!"); } }); // 給按鈕b2新增滑鼠事件 b2.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { f.setBackground(Color.red); } @Override public void mouseExited(MouseEvent e) { f.setBackground(Color.WHITE); } }); // 給選單項設定監聽 mi.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); // 設定視窗可見 f.setVisible(true); } }
上述程式碼中,實現了在一個視窗中佈局了兩個button按鈕,一個演示button按鈕的點選事件,一個演示了滑鼠箭頭的進入和淡出效果。另外該程式碼演示了一級選單的實現(實際上會了一級二級選單也就會了,一級選單的選單項可以是選單,也可以是選單項),給選單項設定了監聽事件,點選選單項既可以退出介面。這是GUI的簡單使用。這裡面有一點是需要特別注意的:就是介面卡模式的體現,在監聽事件中(包括滑鼠的進入移除),程式碼如下:
// 給按鈕b2新增滑鼠事件 b2.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { f.setBackground(Color.red); } @Override public void mouseExited(MouseEvent e) { f.setBackground(Color.WHITE); } });
b2.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
f.setBackground(Color.white);
}
@Override
public void mouseEntered(MouseEvent e) {
f.setBackground(Color.red);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
實際上上訴兩段程式碼的效果是相同的,同樣可以在滑鼠進入和移出時產生效果,但是程式碼的複雜度,是可以看的見的,介面卡的使用,避免了我們對一個接口裡面所有方法的實現,我們只需使用一個繼承過某一介面的實現類的類就能完成。然後在該類中重寫父類方法就可以。就像是第一段程式碼中的MouseAdapter是第二段程式碼中的MouseListener的子類,MouseListener實現了介面中的所有方法,MouseAdapter繼承了MouseListener,所以,當MouseAdapter需要使用到哪個方法,只需重寫父類方法就行。具體的介面卡模式的講解檢視Java基礎總結之設計模式(四)。
關於GUI圖形介面開發,實際上後期會使用NetBeans等開發工具開發,其相對於eclipse有更友好的圖形介面展示。
注:以上文章僅是個人學習過程總結,若有不當之處,望不吝賜教。