1. 程式人生 > 其它 >Java-GUI-事件監聽

Java-GUI-事件監聽

1、視窗的事件監聽

主要用來關閉視窗
格式:
    frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
           System.exit(0);
        }

2、按鈕的事件監聽

當按下按鈕時,會觸發一些事件,可監聽一個按鈕或者多個按鈕,可以用匿名內部類寫出或者自己建立一個類來實現,這裡用的是後者方法。
1、當監聽一個按鈕時

重新寫一個類和一個介面。

具體程式碼如下:
class MeActionListner implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//語句體(實現按下按鈕後所觸發的一些事件)
}
}
2、當多個按鈕同共用一個監聽時

可以通過設定按鈕上的資訊來對按鈕進行區分,從而實現不同的按鈕而能觸發不同的事件

具體程式碼如下:
  //定義兩個按鈕或者多個,以下以兩個為例
  Button button1 = new Button("開始");
  Button button2 = new Button("結束");
  //用setActionCommand()方法來設定每個按鈕中的資訊
  button1.setActionCommand("start");
  button2.setActionCommand("stop");
  //主函式中只需要new一次MeActionListner()即可實現多個按鈕的監聽
  MeActionListner meActionListner= new MeActionListner();
    button.setActionCommand("start");
    button1.setActionCommand("stop");
  //在MeActionListner()中實現按鈕的監聽事件
  class MeActionListner implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
    //用e.getActionCommand()來獲取按鈕資訊,然後用equals("字串")來判斷哪一個按鈕
    if(e.getActionCommand().equals("start"))
    {
        //語句體1(實現按鈕1的觸發事件)
    }
    if(e.getActionCommand().equals("stop"))
    {
       //語句體2(實現按鈕2的觸發事件)
    }
	//若還有其他按鈕,只需再新增條件語句進行判斷即可
}

}

與按鈕監聽有關的程式碼:
   import java.awt.*;
   import java.awt.event.ActionEvent;
   import java.awt.event.ActionListener;
   import java.awt.event.WindowAdapter;
   import java.awt.event.WindowEvent;
 public class GUI06 {
 public static void main(String[] args) {
    Frame frame = new Frame("監聽事件");
    Button button = new Button("開始");
    Button button1=new Button("結束");
    //addActionListener需要一個ActionListener,所以我們需要構造一個,若為介面就寫實現類,若為父類就繼承
    MeActionListner meActionListner= new MeActionListner();
    button.setActionCommand("start");
    button1.setActionCommand("stop");
    button.addActionListener(meActionListner);
    button1.addActionListener(meActionListner);
    frame.add(button,BorderLayout.EAST);
    frame.add(button1,BorderLayout.WEST);
    frame.pack();
    frame.setVisible(true);
    windowClose(frame);

}
//關閉視窗的事件
private static void windowClose(Frame frame){
    frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
           System.exit(0);
        }
    });
}

}

	//觸發按鈕事件的介面
class MeActionListner implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("start"))
    {
        System.out.println("開始");
    }
    if(e.getActionCommand().equals("stop"))
    {
        System.out.println("結束");
    }
}

}`

3、輸入框TextField的事件監聽

1、寫一個繼承類,繼承frame,運用frame中的屬性,在這個類中,new了一個單行的文字框,並且新增到視窗中,當設定輸入框的監聽事件時,在另一個類中實現。

  class Myframe1 extends Frame{
//繼承類需要一個構造器
public Myframe1(){
    TextField textField = new TextField();//可寫單行文字
    //向視窗中新增文字框
    add(textField);

    //監聽這個文字框輸入的東西
    MyActionListener myActionListener = new MyActionListener();
    textField.addActionListener(myActionListener);
    //設定視窗的可見性
    setVisible(true);
    setBounds(400,400,400,400);
	//關閉視窗的監聽事件
    addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    pack();
}

}
2、再寫一個介面,用來實現對輸入框的觸發事件。
在這個類中,需要用e.getSouce()來獲取資源,並且引用文字型別對e.getSouce()返回的物件進行強制轉換成文字語言,然後輸出輸入框中的文字資訊

  class MyActionListener implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {

    //用e.getSouce()來獲取一些資源,這裡需要用所監聽的事件型別對所獲得的資源進行強轉
    TextField field = (TextField) e.getSource();
    System.out.println(field.getText());//獲得輸入框中的文字
}

}
3、拓展--設定替換編碼
即將輸入框中輸入的文字進行替換,但是在後臺中顯示的仍然是替換前的文字資訊
只需要在第1步的類中新增如下程式碼即可

  textField.setEchoChar('*');//用字元*來替換輸入到文字框中的文字

若想輸入之後清空文字框,則只需要在第2步的介面中加上如下程式碼
field.setText("");

  class MyActionListener implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {

    //用e.getSouce()來獲取一些資源,這裡需要用所監聽的事件型別對所獲得的資源進行強轉
    TextField field = (TextField) e.getSource();
    System.out.println(field.getText());//獲得輸入框中的文字
    //清空文字框
    field.setText("");
}

}