(1)GUI 與CLIjava
GUIapp
•Graphical User Interface(圖形用戶接口)。ide
•用圖形的方式,來顯示計算機操做的界面,這樣更方便更直觀。工具
CLI佈局
•Command line User Interface (命令行用戶接口)學習
•就是常見的Dos命令行操做。spa
•須要記憶一些經常使用的命令,操做不直觀。命令行
(2)相關的兩個包: code
java.awt:orm
Abstract Window ToolKit (抽象窗口工具包),須要調用本地系統方法實現功能。屬重量級控件。
javax.swing:
在AWT的基礎上,創建的一套圖形界面系統,其中提供了更多的組件,並且徹底由Java實現。加強了移植性,屬輕量級控件。
(3)GUI的繼承體系
組件:組件就是對象
容器組件:是能夠存儲基本組件和容器組件的組件。
基本組件:是可使用的組件,可是必須依賴容器。
(4)事件監聽機制
事件源:事件發生的地方
事件:就是要發生的事情
事件處理:就是針對發生的事情作出的處理方案
事件監聽器:就是把事件源和事件關聯起來
(5)適配器模式
接口
抽象適配器類
實現類
(6)案例:
A:建立窗體案例
public class FrameDemo { public static void main(String[] args) { // 建立窗體對象 // Frame f = new Frame(); // Frame(String title) Frame f = new Frame("林青霞"); // 設置窗體標題 f.setTitle("HelloWorld"); // 設置窗體大小 f.setSize(400, 300); // 單位:像素 // 設置窗體位置 f.setLocation(400, 200); // 一個方法搞定 //f.setBounds(400, 200, 400, 300); // 調用一個方法,設置讓窗體可見 f.setVisible(true); // System.out.println("helloworld"); }}
B:窗體關閉案例
import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; public class FrameDemo { public static void main(String[] args) { // 建立窗體對象 Frame f = new Frame("窗體關閉案例"); // 設置窗體屬性 f.setBounds(400, 200, 400, 300); // 讓窗體關閉 //事件源 //事件:對窗體的處理 //事件處理:關閉窗口(System.exit(0)); //事件監聽// f.addWindowListener(new WindowListener() { // @Override// public void windowOpened(WindowEvent e) { // }// // @Override// public void windowIconified(WindowEvent e) { // }// // @Override// public void windowDeiconified(WindowEvent e) { // }// // @Override// public void windowDeactivated(WindowEvent e) { // }// // @Override// public void windowClosing(WindowEvent e) { // System.exit(0); // }// // @Override// public void windowClosed(WindowEvent e) { // }// // @Override// public void windowActivated(WindowEvent e) { // }// }); //用適配器類改進 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); // 設置窗體可見 f.setVisible(true); }}
C:窗體添加按鈕並對按鈕添加事件案例。
/* * 針對用戶操做的四種功能 */ public interface UserDao { public abstract void add(); public abstract void delete(); public abstract void update(); public abstract void find();}
public class UserDaoImpl implements UserDao { @Override public void add() { System.out.println("添加功能"); } @Override public void delete() { System.out.println("刪除功能"); } @Override public void update() { System.out.println("修改功能"); } @Override public void find() { System.out.println("查找功能"); } }
/*
* 問題:
* 接口(方法比較多) -- 實現類(僅僅使用一個,也得把其餘的實現給提供了,哪怕是空實現)
* 太麻煩了,
* 解決方案:
* 接口(方法比較多) -- 適配器類(實現接口,僅僅空實現) -- 實現類(用哪一個重寫哪一個)
*/
public abstract class UserAdapter implements UserDao { @Override public void add() { } @Override public void delete() { } @Override public void update() { } @Override public void find() { } }
public class UserDaoImpl2 extends UserAdapter { @Override public void add() { System.out.println("添加功能"); }}
public class UserDaoDemo { public static void main(String[] args) { UserDao ud = new UserDaoImpl(); ud.add(); // 我沒有說咱們須要四種功能都實現啊。 UserDao ud2 = new UserDaoImpl2(); ud2.add(); }}
界面中的組件佈局。
public class FrameDemo { public static void main(String[] args) { // 建立窗體對象 Frame f = new Frame("添加按鈕"); // 設置屬性 f.setBounds(400, 200, 400, 300); // 設置佈局爲流式佈局 f.setLayout(new FlowLayout()); // 建立按鈕對象 Button bu = new Button("點我啊"); // bu.setSize(20, 10); // 把按鈕添加到窗體 f.add(bu); // 設置窗體能夠關閉 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); bu.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("你再點試試"); } }); // 窗體顯示 f.setVisible(true); }}
D:把文本框裏面的數據轉移到文本域
import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; 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; public class FrameDemo { public static void main(String[] args) { / 建立窗體對象 Frame f = new Frame("數據轉移"); // 設置窗體屬性和佈局 f.setBounds(400, 200, 400, 300); f.setLayout(new FlowLayout()); // 建立文本框 final TextField tf = new TextField(20); // 建立按鈕 Button bu = new Button("數據轉移"); // 建立文本域 final TextArea ta = new TextArea(10, 40); // 把組件添加到窗體 f.add(tf); f.add(bu); f.add(ta); // 設置窗體關閉 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); // 對按鈕添加事件 bu.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 獲取文本框的值 String tf_str = tf.getText().trim(); // 清空數據 tf.setText(""); // 設置給文本域 // ta.setText(tf_str); // 追加和換行 ta.append(tf_str + "\r\n"); //獲取光標 tf.requestFocus(); } }); // 設置窗體顯示 f.setVisible(true); }}
E:更改背景色
import java.awt.Button; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class FrameDemo { public static void main(String[] args) { // 建立窗體對象 final Frame f = new Frame("更改背景色"); // 設置窗體屬性和佈局 f.setBounds(400, 200, 400, 300); f.setLayout(new FlowLayout()); // 建立四個按鈕 Button redButton = new Button("紅色"); Button greenButton = new Button("綠色"); Button buleButton = new Button("藍色"); // 添加按鈕 f.add(redButton); f.add(greenButton); f.add(buleButton); // 設置窗體關閉 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); // 對按鈕添加動做事件 // redButton.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // f.setBackground(Color.RED); / } // }); // 對按鈕添加鼠標點擊事件 // redButton.addMouseListener(new MouseAdapter() { // @Override // public void mouseClicked(MouseEvent e) { // f.setBackground(Color.RED); // } // }); // 對按鈕添加鼠標的進入事件 redButton.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { f.setBackground(Color.RED); } }); redButton.addMouseListener(new MouseAdapter() { @Override public void mouseExited(MouseEvent e) { f.setBackground(Color.WHITE); } }); greenButton.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { f.setBackground(Color.GREEN); } }); greenButton.addMouseListener(new MouseAdapter() { @Override public void mouseExited(MouseEvent e) { f.setBackground(Color.WHITE); } }); buleButton.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { f.setBackground(Color.BLUE); } }); buleButton.addMouseListener(new MouseAdapter() { @Override public void mouseExited(MouseEvent e) { f.setBackground(Color.WHITE); } }); // 設置窗體顯示 f.setVisible(true); }}
F:設置文本框裏面不能輸入非數字字符
import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /* * 你輸入的若是是非數字字符,就取消你鍵盤錄入的效果。 */ public class FrameDemo { public static void main(String[] args) { // 建立窗體對象並設置屬性 Frame f = new Frame("不能輸入非數字字符"); f.setBounds(400, 200, 400, 300); f.setLayout(new FlowLayout()); // 建立Label標籤對象 Label label = new Label("請輸入你的QQ號碼,不能是非數字,不信你試試"); TextField tf = new TextField(40); // 添加到窗體上 f.add(label); f.add(tf); // 設置窗體關閉 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); // 給文本框添加事件 tf.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { // 若是你取得的字符不是數字字符就取消事件 // 思路:先獲取字符,判斷字符,取消事件 // char getKeyChar() char ch = e.getKeyChar();// System.out.println(ch); if(!(ch>='0' && ch<='9')){ e.consume(); } } }); // 設置窗體可見 f.setVisible(true); }}
G:一級菜單
import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /* * 一級菜單 */ public class FrameDemo { public static void main(String[] args) { // 建立窗體對象並設置屬性 Frame f = new Frame("一級菜單"); f.setBounds(400, 200, 400, 300); f.setLayout(new FlowLayout()); // 建立菜單欄 MenuBar mb = new MenuBar(); // 建立菜單 Menu m = new Menu("文件"); // 建立菜單項 MenuItem mi = new MenuItem("退出系統"); // 誰添加誰呢 m.add(mi); mb.add(m); // 設置菜單欄 f.setMenuBar(mb); // 設置窗體關閉 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); mi.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); // 設置窗體可見 f.setVisible(true); }}
H:多級菜單
import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; /* * 多級菜單 */ public class FrameDemo { public static void main(String[] args) { // 建立窗體對象並設置屬性 final Frame f = new Frame("多級菜單"); f.setBounds(400, 200, 400, 300); f.setLayout(new FlowLayout()); final String name = f.getTitle(); // 建立菜單欄 MenuBar mb = new MenuBar(); // 建立菜單 Menu m1 = new Menu("文件"); Menu m2 = new Menu("更更名稱"); // 建立菜單項 final MenuItem mi1 = new MenuItem("好好學習"); final MenuItem mi2 = new MenuItem("每天向上"); MenuItem mi3 = new MenuItem("恢復標題"); MenuItem mi4 = new MenuItem("打開記事本"); MenuItem mi5 = new MenuItem("退出系統"); // 誰添加誰呢 m2.add(mi1); m2.add(mi2); m2.add(mi3); m1.add(m2); m1.add(mi4); m1.add(mi5); mb.add(m1); // 設置菜單欄 f.setMenuBar(mb); // 設置窗體關閉 f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); mi1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { f.setTitle(mi1.getLabel()); } }); mi2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { f.setTitle(mi2.getLabel()); } }); mi3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { f.setTitle(name); } }); mi4.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Runtime r = Runtime.getRuntime(); try { r.exec("notepad"); } catch (IOException e1) { e1.printStackTrace(); } } }); mi5.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); // 設置窗體可見 f.setVisible(true); }}
</article>總結:總的來講:GUI : Graphical User Interface (圖形用戶接口)。用圖形的形式顯示計算機操做的界面,更直觀。