2.5.事件监听
public class Test02 {
public static void main(String[] args) {
//按下按钮,触发事件
//两个按钮可以实现同一个监听
Frame frame = new Frame();
frame.setBackground(new Color(208, 162, 226));
frame.setVisible(true);
frame.setBounds(200,200,200,200);
Button button1 = new Button("button1");
button1.setActionCommand("button1按钮点击");
//因为addActionListener()需要一个ActionListener,所以我们需要构造一个ActionListener
button1.addActionListener(new MyListen());
Button button2 = new Button("button2");
button2.setActionCommand("button2按钮点击");
button2.addActionListener(new MyListen());
frame.add(button1,BorderLayout.WEST);
frame.add(button2,BorderLayout.EAST);
}
}
class MyListen implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
}
按下按钮一和按钮二时,会发生如下点击事件:
2.6.输入框TextField监听
public class Test2 {
public static void main(String[] args) {
new MyFrame();
}
}
class MyFrame extends Frame{
public MyFrame(){
setVisible(true);
//frame的自适应大小函数
pack();
TextField field = new TextField();
add(field);
//设置替换编码
field.setEchoChar('*');
//监听这个文本框输入的文字,按下enter,就会触发这个输入框的事件
field.addActionListener(new MyActionListen());
}
}
class MyActionListen implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//获得一些资源,返回一个对象
TextField field = (TextField) e.getSource();
//获得输入框的文字
System.out.println(field.getText());
//null,输入框清零
field.setText("");
}
}
2.7.简易计算器
//简易计算器
public class TestCalc {
public static void main(String[] args) {
new Calculator().loadFrame();
}
}
//计算器类
class Calculator 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 MyCalculatorListener());
//布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
//监听器类
//内部类最大的好处,就是可以畅通无阻的访问外部的属性和方法
private class MyCalculatorListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//1.获得加数和被加数
//2.将这个值 +法运算后,放到第三个框
//3.清除前两个框
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
num3.setText(""+(n1+n2));
num1.setText("");
num2.setText("");
}
}
}
2.8.画笔
public class TestPaint {
public static void main(String[] args) {
new MyPaint().loadFrame();
}
}
class MyPaint extends Frame{
public void loadFrame(){
setVisible(true);
setBounds(400,400,400,400);
}
//画笔
@Override
public void paint(Graphics g) {
//画笔,需要有颜色,画笔可以画画
g.setColor(new Color(125, 57, 99));
g.drawRect(100,100,100,100);
g.drawOval(200,200,50,50);
}
}
2.9.鼠标监听
//鼠标监听事件
public class TestMouseListener {
public static void main(String[] args) {
new MyFrame("画图");
}
}
class MyFrame extends Frame {
//画画需要画笔,需要监听鼠标当前的位置,需要集合来存储这个点
private List points;
public MyFrame(String title){
super(title);
//存鼠标点击的点
this.points = new ArrayList();
setVisible(true);
setBounds(400,400,400,400);
//鼠标监听器
addMouseListener(new MouseListener());
}
@Override
public void paint(Graphics g) {
Iterator iterator = points.iterator();
while (iterator.hasNext()){
Point point = (Point) iterator.next();
g.setColor(new Color(103, 188, 47));
g.drawOval(point.x,point.y,5,5);
}
}
class MouseListener extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
MyFrame frame = (MyFrame) e.getSource();
//这个点就是鼠标的点
Point point = new Point(e.getX(), e.getY());
points.add(point);
//每次点击鼠标都需要重新画一遍
frame.repaint();
}
}
}
2.10.窗口监听
public class TestWindowListener {
public static void main(String[] args) {
new MyWindowListener();
}
}
class MyWindowListener extends Frame{
public MyWindowListener(){
setVisible(true);
setBackground(Color.BLUE);
setBounds(300,300,300,300);
addWindowListener(new WindowAdapter() {
@Override//关闭窗口
public void windowClosing(WindowEvent e) {
System.out.println("窗口已关闭");
System.exit(0);
}
@Override//激活窗口
public void windowActivated(WindowEvent e) {
setTitle("你快回来啊");
}
});
}
}
2.11键盘监听
public class TestKeyListener {
public static void main(String[] args) {
new KeyFrame();
}
}
class KeyFrame extends Frame{
public KeyFrame(){
setVisible(true);
setBounds(200,200,200,200);
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
//获得键盘下的键是哪一个,当前的码
int keyCode = e.getKeyCode();
//不需要记住这个数值,直接使用静态属性VK_XX
if(keyCode == KeyEvent.VK_UP){
System.out.println("你按了上键");
}
//根据按下不同键,产生不同操作
}
});
}
}