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("简单计算器");
}
}
- 声明组件
- 在init()方法中组件实例化
- 添加组件
监听器:
- 声明监听器
- 监听器实例化
- 调用监听器set()方法
- 为事件源注册监听器
键盘事件
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("键盘事件");
}
}