GUI使用者圖形介面
阿新 • • 發佈:2018-11-07
一、兩個常用包
①java.awt: 和系統關聯較強
②java.swing:純Java編寫
二、GUI的繼承體系
元件:元件就是物件
容器元件:是可以儲存基本元件和容器元件的元件
基本元件:是可以使用的元件,但是必須依賴容器
三、事件監聽機制
A:事件源 B:事件 C:事件處理 D:事件監聽
A:事件源 事件發生的地方
B:事件 就是要發生的事情
C:事件處理 就是針對發生的事情做出的處理方案
D:事件監聽 就是把事件源和事件關聯起來
四、介面卡模式
A:介面 B:抽象適配類 C:實現類
五、案例
①建立窗體案例
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);}}②窗體關閉
public class FrameDemo {
public static void main(String[] args) {
Frame f = new Frame("窗體關閉案例");
f.setBounds(400, 200, 400, 400);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
});
f.setVisible(true);
}
}
③按鈕事件
/*
* 需求:把按鈕新增到窗體,並對按鈕新增一個點選事件。
* A:建立窗體物件
* B:建立按鈕物件
* C:把按鈕新增到窗體
* D:窗體顯示
*/
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);
}
}
④把文字框裡面的資料轉移到文字域
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.setText("");// 追加和換行ta.append(tf_str + "\r\n");//獲取游標tf.requestFocus();}});// 設定窗體顯示f.setVisible(true);}}
⑤滑鼠進入事件更改背景色
public class FrameDemo {
public static void main(String[] args) {
// 建立窗體物件
Frame f = new Frame("滑鼠更改背景色");
// 設定窗體屬性和佈局
f.setBounds(400, 200, 400, 300);
f.setLayout(new FlowLayout());
Button redButton = new Button("藍色");
f.add(redButton);
// 設定窗體關閉
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 對按鈕新增動作事件
// redButton.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// // TODO Auto-generated method stub
// f.setBackground(Color.BLUE);
// }
// });
// 對按鈕新增滑鼠點選事件
// redButton.addMouseListener(new MouseAdapter() {
// @Override
// public void mouseClicked(MouseEvent e) {
// // TODO Auto-generated method stub
// f.setBackground(Color.BLUE);
// }
// });
// 對按鈕新增滑鼠的進入事件
redButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
f.setBackground(Color.BLUE);
}
});
redButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
f.setBackground(Color.RED);
}
});
// 設定窗體顯示
f.setVisible(true);
}
}
⑥設定文字框裡面不能輸入非數字字元
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);
}
}
⑦一級選單
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);
}
}
⑧多級選單
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);
}
}