GUI编程-2

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("你按了上键");
                }
                //根据按下不同键,产生不同操作
            }
        });
    }
}
原创文章 2 获赞 0 访问量 245

猜你喜欢

转载自blog.csdn.net/weixin_45363806/article/details/105896027