【Java】【JFame】事件处理

1.先做出以下界面:
在这里插入图片描述

package com.itheima;

import javax.swing.*;
import java.awt.*;
public class  Component extends JFrame{
    JTextField text;
    JButton button;
    JTextArea area;
    public Component() {
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    void init(){
        setLayout(new FlowLayout());
        text = new JTextField(10);
        button = new JButton("确定");
        area = new JTextArea(9,30);
        add(text);
        add(button);
        add(area);
    }
}
package com.itheima;
public class Main {
    public static void main(String[] args) {
        Component win = new Component();
        win.setBounds(100,100,350,260);
        win.setTitle("事件处理");
    }
}

2,下面开始写监视器的类

package com.itheima;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PoliceListen implements ActionListener {
    JTextField text;
    JTextArea area;

    public void setText(JTextField text) {
        this.text = text;
    }

    public void setArea(JTextArea area) {
        this.area = area;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        String str = text.getText();//获取文本框内容
        area.append(str + "的长度为:" + str.length() + "\n");//添加内容
        text.setText("");//清空文本框内容
    }
}

注意: 组件都是引用类型

package com.itheima;

import javax.swing.*;
import java.awt.*;
public class  Component extends JFrame{
    JTextField text;
    JButton button;
    JTextArea area;
    PoliceListen listen;
    public Component() {
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    void init(){
        setLayout(new FlowLayout());
        text = new JTextField(10);
        button = new JButton("确定");
        area = new JTextArea(9,30);
        listen = new PoliceListen();
        listen.setText(text);
        listen.setArea(area);
        add(text);
        add(button);
        add(new JScrollPane(area));
        text.addActionListener(listen);
        button.addActionListener(listen);
    }
}

package com.itheima;
public class Main {
    public static void main(String[] args) {
        Component win = new Component();
        win.setBounds(100,100,350,260);
        win.setTitle("事件处理");
    }
}

在这里插入图片描述
**第一步:**先写出界面

第二步: 写监听器的类,实现接口。监听器需要文本框内容,同时对文本区作添加内容。所以要使用set()方法获取MyFrame()组件信息。

第三步: 在MyFrame类中的成员属性声明监听器,在init()方法中实例化监听器,调用监听器的set()方法,最后为事件源文本框,按钮注册监听器。

今天有个收获就是:PoliceListen类通过set()方法获取MyFrame类的信息。
其实,平时通过在MyFrame类中设置get()方法也可以,但是仔细考虑类的封装性,你会发现在PoliceListen类中设置set()方法更好。

在接收类中设置set()方法。

做出以下界面

在这里插入图片描述

package com.itheima;

import javax.swing.*;
import java.awt.*;
public class  Component extends JFrame{
    JTextField text1,text2;
    JButton button;
    JComboBox comboBox;
    JTextArea area;
    public Component() {
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    void init(){
        setLayout(new FlowLayout());
        text1 = new JTextField(5);
        comboBox = new JComboBox();
        text2 = new JTextField(5);
        button = new JButton("计算");
        area = new JTextArea(9,30);
        comboBox.addItem("选择运算符号:");
        String str[] = {"+","-","*","/"};
        for(int i=0;i<str.length;i++){
            comboBox.addItem(str[i]);
        }
        add(text1);
        add(comboBox);
        add(text2);
        add(button);
        add(new JScrollPane(area));

    }
}

package com.itheima;
public class Main {
    public static void main(String[] args) {
        Component win = new Component();
        win.setBounds(100,100,390,330);
        win.setTitle("简单计算器");
    }
}

  1. 声明组件
  2. 在init()方法中组件实例化
  3. 添加组件

监听器:

  1. 声明监听器
  2. 监听器实例化
  3. 调用监听器set()方法
  4. 为事件源注册监听器

键盘事件

在这里插入图片描述
MyFrame

package com.itheima;

import javax.swing.*;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
public class MyFrame extends JFrame{
    JLabel label1,label2;
    PoliceListen policeListen;
    public MyFrame() {
        init();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    void init(){
        setLayout(new FlowLayout());
        label1 = new JLabel();
        label2 = new JLabel();
        add(label1);
        add(label2);
        policeListen = new PoliceListen();
        policeListen.setLabel1(label1);
        policeListen.setLabel2(label2);
        addKeyListener(policeListen);




    }
}

PoliceListen

package com.itheima;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class PoliceListen implements KeyListener {
   JLabel label1,label2;

    public void setLabel1(JLabel label1) {
        this.label1 = label1;
    }

    public void setLabel2(JLabel label2) {
        this.label2 = label2;
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        char c = e.getKeyChar();
        label1.setText("你按下了<<"+c+">>键");
    }

    @Override
    public void keyReleased(KeyEvent e) {
        char c = e.getKeyChar();
        label2.setText("你释放了<<"+c+">>键");
    }
}

Main

package com.itheima;
public class Main {
    public static void main(String[] args) {
        MyFrame win = new MyFrame();
        win.setBounds(100,100,350,300);
        win.setTitle("键盘事件");
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值