我們編寫程序就是爲了方便用戶使用, 我覺得UI設計的核心就是簡潔, 操作過於繁瑣的程序讓很大一部分用戶敬而遠之. 即使功能強大, 但是人們更願意使用易於操作的軟件. 近年流行起來的操作手勢和逐漸趨於成熟的語言控制以及其他更加易於操作的方式很可能會顛覆鼠標鍵盤的操作方式, 我相信這一天必將到來.
電影<<普羅米修斯>>中畫面
我記得我去年編寫了我的第一個用戶界面, 現在想起來當時非常令我困惑的有兩項:
- 不知道該如何將自己原來的功能代碼與新建的圖形界面聯繫在一起, 對衆多的監聽器不知從何下手.
- 不論我怎樣修改代碼, 界面都是那麼地奇醜無比. 對各式各樣的佈局管理器一籌莫展. 以至於在我分享代碼的時候直接忽略了圖形界面這塊, 交由更加擅長設計UI界面的程序員完善.
- 給各個組件添加合適的監聽器
事件源:能夠接收外部事件的源體。例如窗體(Component) 面板(Panel) 文本框(TextField)等等
偵聽器:能夠接收事件源通知的對象。例如MouseListener KeyListener
事件處理程序:用於處理事件的對象。Event
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ListenerDemo {
JFrame frame;
JPanel panel;
JButton atk;
JButton fig;
JTextField text;
public ListenerDemo() {
init();
addListener();
}
public void init() {
frame = new JFrame("Test");
frame.setSize(200, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //這裏其實是添加了一個窗體監聽器WindowsListener,
// 設置用戶按下窗體上CLOSE按鈕發生的事件
panel = new JPanel();
atk = new JButton("ATK");
fig = new JButton("FIG");
text = new JTextField(15);
frame.add(panel);
panel.add(text);
panel.add(atk);
panel.add(fig);
frame.setVisible(true);
}
public void addListener() {
ActionListener listener = new ActionListener() { // 定義了一個ActionListener(用於接收操作事件的偵聽器)
public void actionPerformed(ActionEvent e) {
JButton button = (JButton)e.getSource();
String name = button.getText();
text.setText("你按下的按鈕是 :" + name);
// button.removeActionListener(this); // 取消這段代碼的註釋, 那麼按鈕的偵聽事件只會執行一次
}
};
atk.addActionListener(listener);
fig.addActionListener(listener);
}
public static void main(String[] args) {
ListenerDemo demo = new ListenerDemo();
}
}
上面的事例實現了一個非常簡單的事件驅動模型, 在此就以模型的結構描述一下事件從發生到結束是怎麼樣進行的.- KeyListener該偵聽器接收鍵盤事件. 主要偵聽動作有按下, 釋放和鍵入某個鍵
- MouseListener用於偵聽組件上的鼠標事件(按下、釋放、單擊、進入或離開), 需要實現發生類似事件響應功能可選擇使用.
- ComponentListener 用於接收組件事件的偵聽器, 當組件的可見性, 位置和大小發生改變時就會產生響應. 調用對應的方法.