溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java GUI編程之監(jiān)聽操作實(shí)例分析

發(fā)布時(shí)間:2020-09-14 09:42:02 來源:腳本之家 閱讀:149 作者:qq_42412646 欄目:編程語言

本文實(shí)例講述了java GUI編程之監(jiān)聽操作。分享給大家供大家參考,具體如下:

當(dāng)點(diǎn)擊Frame中的component組件時(shí),會(huì)產(chǎn)生相應(yīng)的效果,但是相應(yīng)的其必須進(jìn)行監(jiān)聽,確定是那個(gè)對(duì)象,那種操作,但是如果用cup進(jìn)行主動(dòng)的監(jiān)聽就會(huì)消耗大量的資源,所以有了被動(dòng)的監(jiān)聽,即對(duì)應(yīng)的事件發(fā)生后會(huì)自動(dòng)的執(zhí)行相關(guān)的代碼。

Button監(jiān)聽:

instance 1:

import java.awt.*;
import java.awt.event.*;
public class MoniterStart {
 public static void main(String[] args) {
 Frame f = new Frame();
 Button b = new Button("Press ");
 f.add(b,BorderLayout.CENTER);
 MyMonitor bh = new MyMonitor();
 b.addActionListener(bh);
 f.setBounds(100, 100, 300, 300);
 f.setVisible(true);
 }
}
class MyMonitor implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 System.out.println("aAH");
 }
}

進(jìn)行被動(dòng)監(jiān)聽是你必須確定是什么地方什么類型的componet發(fā)出的,我們不可能提供所有的信息,所以我們初建了一個(gè)事件對(duì)應(yīng)一個(gè)對(duì)象,其都實(shí)現(xiàn)了一個(gè)接口,當(dāng)事件發(fā)生時(shí),就會(huì)調(diào)用對(duì)應(yīng)的事件方法。即(implements ActionListener),而對(duì)應(yīng)的當(dāng)實(shí)現(xiàn)方法是就要求其提供事件動(dòng)作。

instance 2:

import java.awt.*;
import java.awt.event.*;
public class Monitor2 {
 public static void main(String[] args) {
 Frame f1 = new Frame();
 Button b1 = new Button("Start ");
 Button b2 = new Button("Stop ");
 b1.setActionCommand("The End");
 f1.add(b1,BorderLayout.CENTER);
 f1.add(b2,BorderLayout.SOUTH);
 MyMonitor1 bh = new MyMonitor1();
 b1.addActionListener(bh);
 b2.addActionListener(bh);
 f1.setBounds(100, 100, 300, 300);
 f1.setVisible(true);
 }
}
class MyMonitor1 implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 System.out.println("aAH you get it " + e.getActionCommand());
 }
}

注:當(dāng)一個(gè)監(jiān)聽器監(jiān)聽多個(gè)button對(duì)象時(shí),我們可以用setActionCommand進(jìn)行區(qū)別,這個(gè)相當(dāng)于是一個(gè)屬性亦或是一種標(biāo)記。

TextField(文本輸入監(jiān)聽)

instance 3;

import java.awt.*;
import java.awt.event.*;
public class TfMonitor {
 public static void main(String[] args) {
 new TFFrame();
 }
}
class TFFrame{
 TFFrame(){
 Frame f = new Frame("TF");
 TextField tf = new TextField();
 f.add(tf);
 tf.addActionListener(new TFFrameMonitor());
 f.setBounds(100, 100, 300, 300);
 f.setVisible(true);
 }
}
/*
class TFFrame extends Frame{
 TFFrame(){
// Frame f = new Frame("TF");
 TextField tf = new TextField();
 add(tf);
 tf.addActionListener(new TFFrameMonitor());
// f.setBounds(100, 100, 300, 300);
 setBounds(100, 100, 300, 300);
 setVisible(true);
 }
}
*/
class TFFrameMonitor implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 TextField text = (TextField)e.getSource();
 System.out.println(text.getText());
// text.setText(null);
 }
}

TextField屬于一種輸入文本類的組件,對(duì)于Frame類其一種可以直接用Frame構(gòu)造方法構(gòu)造,直接產(chǎn)生一個(gè)Frame的對(duì)象,另一種可以直接繼承Frame這樣就相當(dāng)于已經(jīng)存在了一個(gè)Frame類,可以直接使用Frame里面的方法。

注:其上面的setText(null)是相當(dāng)于在輸入結(jié)束按回車鍵的時(shí)候,會(huì)自動(dòng)的把輸入框里的數(shù)據(jù)清空。如果沒有,其還會(huì)繼續(xù)存在。

instance 4:

import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TFFrame2Monitor {
 public static void main(String[] args) {
 new TFFrame2();
 }
}
class TFFrame2 extends Frame{
 TFFrame2(){
 TextField tf = new TextField();
 add(tf);
 tf.addActionListener(new TFFrameMonitor2());
 tf.setEchoChar('*');
 setBounds(100, 100, 300, 300);
 setVisible(true);
 }
}
class TFFrameMonitor2 implements ActionListener{
 public void actionPerformed(ActionEvent e) {
 TextField text = (TextField)e.getSource();
 System.out.println(text.getText());
 text.setText(null);
 }
}

僅僅是對(duì)Text Filed對(duì)象添加了一個(gè)setEchoChar,表示輸入后的表面顯示。如果沒有,即為輸入什么就顯示什么,如果添加了就和輸密碼一樣被覆蓋了。

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI