日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

事件监听(窗口关闭、输入框事件、计算器、画笔、鼠标、窗口、键盘)

發布時間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 事件监听(窗口关闭、输入框事件、计算器、画笔、鼠标、窗口、键盘) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事件監聽:當某個事情發生的時候,要做什么操作


目錄

簡單事件監聽

輸入框事件監聽

簡易計算器

畫 筆

鼠標監聽

窗口監控

鍵盤監聽


???????

簡單事件監聽

? ? ? ? 1、關閉窗口

// 希望:按下按鈕,可以觸發一些事件 import java.awt.*; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;public class ActionEvent {public static void main(String[] args) {Frame frame = new Frame();Button button = new Button();// 因為 addActionListener() 需要一個 ActionListener// 所以我們需要構造一個 ActionListenerMyActionListener myActionListener = new MyActionListener();button.addActionListener(myActionListener);frame.add(button, BorderLayout.CENTER);frame.setSize(300,300);windowClose(frame); //關閉窗口frame.setVisible(true);}// 關閉窗口的事件private static void windowClose (Frame frame) {frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});} }// 事件監聽 class MyActionListener implements ActionListener {@Overridepublic void actionPerformed(java.awt.event.ActionEvent e) {System.out.println('a'); //點擊按鈕時輸出a} }

? ? ? ? 2、兩個按鈕共享一個事件

import java.awt.*; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;// 兩個按鈕,實現同一個監聽 public class ActionTwo {public static void main(String[] args) {Frame frame = new Frame("開始-停止");Button button1 = new Button("start");Button button2 = new Button("stop");button2.setActionCommand("button2-stop");MyMonitor myMonitor = new MyMonitor();button1.addActionListener(myMonitor);button2.addActionListener(myMonitor);frame.add(button1, BorderLayout.NORTH);frame.add(button2, BorderLayout.SOUTH);frame.pack();frame.setVisible(true);} }class MyMonitor implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {// e.getActionCommand() 獲得按鈕的信息System.out.println("按鈕被點擊了:msg=> " + e.getActionCommand());} }

?

輸入框事件監聽

import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class TextAction {public static void main(String[] args) {new MyFrame1();} }class MyFrame1 extends Frame {public MyFrame1() {TextField textField = new TextField();add(textField);//監聽這個文本框輸入的文字MyActionListener1 myActionListener1 = new MyActionListener1();//按下enter,就會觸發這個輸入框監聽事件textField.addActionListener(myActionListener1);setVisible(true);pack();} }class MyActionListener1 implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {// 因為 public Object getSource(),故可向上轉型TextField field = (TextField) e.getSource(); //獲得一些資源,返回的一個對象System.out.println(field.getText()); //獲得輸入框的文本} }

  • 加強版:隱藏輸入字符
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class TextAction {public static void main(String[] args) {new MyFrame1();} }class MyFrame1 extends Frame {public MyFrame1() {TextField textField = new TextField();add(textField);//監聽這個文本框輸入的文字MyActionListener1 myActionListener1 = new MyActionListener1();//按下enter,就會觸發這個輸入框監聽事件textField.addActionListener(myActionListener1);//設置替換編碼(文本框顯示的是替換編碼,開發人員看到的是正常文字)textField.setEchoChar('*');setVisible(true);pack();} }class MyActionListener1 implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {// 因為 public Object getSource(),故可向上轉型TextField field = (TextField) e.getSource(); //獲得一些資源,返回的一個對象System.out.println(field.getText()); //獲得輸入框的文本// 回車清空field.setText(""); // null 是對象,""是空字符串,二者不同} }

簡易計算器

  • 頁面:包含三個文本框(加數、被加數、和),一個標簽+,一個按鈕=
  • 功能:輸入加數和被加數后,點擊=按鈕,顯示和的同時,清除加數、被加數

? ? ? ? 1、面向過程編程

import java.awt.*; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class Calculator {public static void main(String[] args) {new Calc();} }// 計算器類 class Calc extends Frame{public Calc(){// 3個文本框 ——》 加數、被加數、和TextField num1 = new TextField(10); //字符數TextField num2 = new TextField(10); //字符數TextField num3 = new TextField(20); //字符數// 1個按鈕 ——》 ‘=’Button button = new Button("=");button.addActionListener(new MyCalculatorLisenter(num1, num2, num3));// 1個標簽 ——》 ‘+’Label label = new Label("+");//布局 ——》 流式布局setLayout(new FlowLayout());//組合add(num1);add(label);add(num2);add(button);add(num3);pack();setVisible(true);} }//監聽器類 class MyCalculatorLisenter implements ActionListener{// 獲取三個變量private TextField num1, num2, num3;public MyCalculatorLisenter(TextField num1, TextField num2, TextField num3){this.num1 = num1;this.num2 = num2;this.num3 = num3;}@Overridepublic void actionPerformed(ActionEvent e) {// 1、獲得加數和被加數int n1 = Integer.parseInt(num1.getText());int n2 = Integer.parseInt(num2.getText());// 2、將兩個數相加,放入第三個框num3.setText(""+(n1+n2));// 3、清楚前兩個框num1.setText("");num2.setText("");} }

? ? ? ? 2、完全面向對象編程(利用組合)

public class Calculator {public static void main(String[] args) {new Calc().loadFrame();} }// 計算器類 class Calc extends Frame {// 屬性TextField num1, num2, num3;//方法public void loadFrame() {num1 = new TextField(10); //字符數num2 = new TextField(10); //字符數num3 = new TextField(20); //字符數Button button = new Button("=");Label label = new Label("+");button.addActionListener(new MyCalculatorLisenter(this));//布局setLayout(new FlowLayout());//組合add(num1);add(label);add(num2);add(button);add(num3);pack();setVisible(true);} }// 監聽器類 class MyCalculatorLisenter implements ActionListener {// 獲取計算器這個對象,在一個類中組合另外一個類Calc calc = null;public MyCalculatorLisenter(Calc calc){this.calc = calc;}@Overridepublic void actionPerformed(ActionEvent e) {int n1 = Integer.parseInt(calc.num1.getText());int n2 = Integer.parseInt(calc.num2.getText());calc.num3.setText("" + (n1+n2) );calc.num1.setText("");calc.num2.setText("");} }

? ? ? ? 3、內部類:暢通無阻地訪問外部類的屬性和方法(但在一些特殊情況中內部類并不能優化代碼,故要看實際情況來使用內部類)

public class Calculator {public static void main(String[] args) {new Calc().loadFrame();} }// 計算器類 class Calc extends Frame {// 屬性TextField num1, num2, num3;//方法public void loadFrame() {num1 = new TextField(10); //字符數num2 = new TextField(10); //字符數num3 = new TextField(20); //字符數Button button = new Button("=");Label label = new Label("+");button.addActionListener(new MyCalculatorLisenter());//布局setLayout(new FlowLayout());//組合add(num1);add(label);add(num2);add(button);add(num3);pack();setVisible(true);}// 監聽器類private class MyCalculatorLisenter implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {int n1 = Integer.parseInt(num1.getText());int n2 = Integer.parseInt(num2.getText());num3.setText("" + (n1+n2) );num1.setText("");num2.setText("");}}}

? ? ? ?

畫 筆

? ? ? ? 手動設置畫筆顏色,以及繪畫圖案,使其運行后直接顯示在框架中

import java.awt.*;public class AutoPaint {public static void main(String[] args) {new MyPaint().loadFrame();} }class MyPaint extends Frame {//設置窗口public void loadFrame() {setBounds(200,200,600,500);setVisible(true);}//畫筆public void paint(Graphics g) {//畫筆——需要有顏色g.setColor(Color.red);g.drawOval(100,100,100,100);g.setColor(Color.MAGENTA);g.fillOval(300,300,100,100);//實心圓//習慣:將畫筆設置為最初的顏色——黑色g.setColor(Color.black);} }

鼠標監聽

? ? ? ? 1、目的:想要實現鼠標畫畫

? ? ? ? 2、思路:?

? ? ? ? ?3、代碼

import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Iterator;// 鼠標監聽事件 public class MousePaint {public static void main(String[] args) {new MyFrame2("Draw");} }//畫板 class MyFrame2 extends Frame {//存 點(畫畫需要畫筆,需要監聽鼠標當前的位置,需要集合來存儲這個點)ArrayList points;public MyFrame2(String title){super(title);setBounds(200,200,400,300);//存鼠標點擊的點points = new ArrayList();setVisible(true);//鼠標器監聽器,針對這個窗口this.addMouseListener(new MyMouseListener());}@Overridepublic void paint(Graphics g) {//畫畫,監聽鼠標的事件// Iterator(迭代器)Iterator iterator = points.iterator();while (iterator.hasNext()) {Point point = (Point) iterator.next();g.setColor(Color.magenta);g.fillOval(point.x,point.y,10,10); //點實際上是一個小圓}}//添加一個點到界面上public void addPaint(Point point) {points.add(point);}//內部類//適配器模式private class MyMouseListener extends MouseAdapter {//鼠標————按下、彈起、按住不放@Overridepublic void mousePressed(MouseEvent e) {MyFrame2 myFrame2 = (MyFrame2) e.getSource();//我們點擊鼠標的時候,就會在界面上產生一個點————鼠標的點myFrame2.addPaint( new Point( e.getX(), e.getY() ) );//每次點擊鼠標都需要重新畫一遍myFrame2.repaint(); //刷新}} }

? ? ? ? 4、效果(點是我自己畫的)

? ? ? ? ?5、知識拓展

? ? ? ? ? ? ? ? (1)ArrayList 類是一個可以動態修改的數組,與普通數組的區別就是它是沒有固定大小的限制,我們可以添加或刪除元素

? ? ? ? ? ? ? ? (2)Java Iterator(迭代器)不是一個集合,它是一種用于訪問集合的方法,可用于迭代?ArrayList?和?HashSet?等集合

  • 調用 it.next() 會返回迭代器的下一個元素,并且更新迭代器的狀態
  • 調用 it.hasNext() 用于檢測集合中是否還有元素
  • 調用 it.remove() 將迭代器返回的元素刪除

窗口監控

import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;public class WindowFrame {public static void main(String[] args) {new MyWindowFrame();} }class MyWindowFrame extends Frame {public MyWindowFrame() {setBackground(Color.BLUE);setBounds(100,100,200,200);setVisible(true);this.addWindowListener(//匿名內部類new WindowAdapter() {//關閉窗口@Overridepublic void windowClosing(WindowEvent e) {System.out.println("windowClosing");System.exit(0); //關閉窗口}//激活窗口@Overridepublic void windowActivated(WindowEvent e) {System.out.println("windowActivated");}});} }

鍵盤監聽

? ? ? ? 1、代碼

import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent;public class KeyListener {public static void main(String[] args) {new KeyFrame();} }class KeyFrame extends Frame {public KeyFrame() {setBounds(1,2,300,400);setVisible(true);this.addKeyListener(new KeyAdapter() {//鍵盤按下@Overridepublic void keyPressed(KeyEvent e) {//獲得鍵盤下的鍵是哪一個,當前的碼int KeyCode = e.getKeyCode(); //不需要去記這個數值,直接使用靜態屬性 VK_xxx 即可System.out.println(KeyCode);if (KeyCode == KeyEvent.VK_UP){System.out.println("你按了上鍵");}// 根據按鍵的不同操作,產生不同結果}});} }

? ? ? ? 2、效果

  • 解釋:鍵盤輸入7,輸出103;? ?輸入q,輸出81;? ?輸入i,輸出73;? ?按向上的按鈕,輸出38和“你按了上鍵”

?

總結

以上是生活随笔為你收集整理的事件监听(窗口关闭、输入框事件、计算器、画笔、鼠标、窗口、键盘)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。