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("");
}

}

Tags: