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

