Java界面开发--监听器

Java界面开发--监听器

监听器

  • 窗体 面板:

  • 鼠标监听器

  • 按钮 菜单:

  • 动作监听器

  • 窗体程序:

  • 键盘监听器:若界面上有其他组件,考虑将焦点设在主窗体

实践对象

  • 每个重写的方法中都带有一个函数**Event

  • 每个参数事件对象都可以用于获取当前事件信息:

  • ActionEvent:获取按钮、菜单上的文字及按钮、菜单的对象引用

  • MouseEvent:获取鼠标操作的坐标,左键、右键、中键点击次数

  • KeyEvent:获取键盘按下的按键信息

  • ChangeEvent:获取滑杆的具体数值

监听器使用步骤

  • 1.创建一个类 实现 监听器

  • 2.实现重写接口中所有函数

  • 3.在界面类中创建监听器对象

  • 4.所有组件调用各自对应监听器添加函数添加这个对象

改造组件

  • 继承组件类自己实现组件

  • 视图

  • 监听器

  • 直接画组件 利用鼠标监听 根据坐标判断

实例

  • 界面类:

package lyq0311;

import lyq0226.Main;

import javax.swing.*;
import java.awt.*;
public class UI extends JFrame {
    public UI(){
        JFrame jf=this;
        jf.setTitle("监听器");
        jf.setSize(800,700);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setLayout(new FlowLayout());
        JButton btn1=new JButton("1");
        jf.add(btn1);
        JButton btn2=new JButton("2");
        jf.add(btn2);

        JSlider slider=new JSlider(0,255);
        jf.add(slider);

        JMenuBar menuBar=new JMenuBar();
        JMenu jmu0=new JMenu("菜单1");
        JMenuItem jmi0=new JMenuItem("菜单项1");
        menuBar.add(jmu0);
        jmu0.add(jmi0);

        jf.setJMenuBar(menuBar);
        inipomenu();
        JPanel jp=new JPanel();
        jp.setBackground(Color.WHITE);
        jp.setComponentPopupMenu(jPopupMenu);
        jp.setPreferredSize(new Dimension(100,220));


        jf.add(jp);

        jf.setVisible(true);

        jf.setFocusable(true);

        UIListener uil=new UIListener();
        jf.addMouseListener(uil);
        jf.addMouseMotionListener(uil);
        jf.addKeyListener(uil);
        btn1.addActionListener(uil);
        btn2.addActionListener(uil);
        jmi0.addActionListener(uil);
        slider.addChangeListener(uil);

        uil.g=jf.getGraphics();

    }
    JPopupMenu jPopupMenu=new JPopupMenu();
    public void inipomenu(){
        JMenu jMenu=new JMenu("菜单1");
        jMenu.add(new JMenuItem("菜单项"));
        jPopupMenu.add(jMenu);
        jPopupMenu.add(new JMenu("菜单2"));
        jPopupMenu.add(new JMenuItem("菜单3"));
        jPopupMenu.add(new JMenuItem("菜单4"));
        jPopupMenu.add(new JMenuItem("菜单5"));
    }

    @Override
    public void paint(Graphics g){
        super.paint(g);
        g.fillOval(100,210,60,35);
        g.setColor(Color.WHITE);
        g.drawString("你好",120,200);
    }

    public static void main(String[] args) {
        new UI();
    }
}
  • 监听器类

package lyq0311;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.*;

public class UIListener implements MouseListener,MouseMotionListener,ActionListener,ChangeListener,KeyListener  {

   Graphics g;
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("按钮被点击");
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        int KeyCode=e.getKeyCode();
        char KeyChar=e.getKeyChar();
//        if(KeyCode==KeyEvent.VK_SPACE){
//
//        }
        System.out.println("按下按钮"+KeyCode+"|"+KeyChar);

    }

    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("松开按键");

    }

    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("点击鼠标");

    }

    @Override
    public void mousePressed(MouseEvent e) {
        int x=e.getX();
        int y=e.getY();
        if(x>=100&&x<=160&&y>=210&&y<=245){
            System.out.println("按钮被点击");
            g.setColor(Color.BLUE);
            g.fillOval(100,210,60,35);
            g.setColor(Color.WHITE);
            g.drawString("Hello",120,230);
        }
        System.out.println("按下鼠标");

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        g.setColor(Color.BLACK);
        g.fillOval(100,210,60,35);
        g.setColor(Color.WHITE);
        g.drawString("你好",120,230);
        System.out.println("鼠标松开");

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }

    @Override
    public void mouseDragged(MouseEvent e) {

    }

    @Override
    public void mouseMoved(MouseEvent e) {

    }

    @Override
    public void stateChanged(ChangeEvent e) {
        JSlider jsl = (JSlider) e.getSource();
        System.out.println(jsl.getValue());
        System.out.println("组件状态改变");
        g.setColor(new Color(jsl.getValue(),jsl.getValue(),jsl.getValue()));
        g.fillOval(300+jsl.getValue(),200,jsl.getValue()*2,jsl.getValue()*2);
    }
}

实现结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值