监听器(初级)

本文介绍了Java Swing中监听器的使用,包括鼠标监听、动作监听、键盘监听和滑杆状态改变监听。通过实例展示了如何创建监听器对象,将它们添加到组件中,并通过事件对象获取相关事件信息。同时,文章还探讨了如何改造组件,实现自定义的交互效果。

监听器

  • 窗体面板

  • 鼠标监听(MouseListener)

  • 按钮 菜单

  • 动作监听器(ActionLitener)

  • 滑杆

  • 状态改变监听器(ChangeListener)

  • 窗体程序

  • 键盘监听器(KeyListener):

界面上有其他组件,考虑将 焦点 设置到主窗体上

事件对象

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

  • 当我们在界面上发生一系列事件时,系统底层会将事件的相关信息打包传入方法中

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

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

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

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

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

监听器使用步骤

  • 创建一个类 实现 监听器

  • 实现重写接口中所有的方法

  • 在界面类中 创建 监听类的 对象

  • 所有的组件调用各自对应的监听器 添加方法 添加这个对象

改造组件

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

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

范例:

packagecombk.a01ui.zyf0310;

importjavax.swing.*;

importjava.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 ("登录");

jf.add (btn1);

JButton btn2 = new JButton ("登录");

jf.add (btn2);

// 滑杆

JSlider slider = new JSlider (0, 255);

jf.add (slider);

// 菜单:

JMenuBar menuBar = new JMenuBar ();

JMenu jmu1 = new JMenu ("菜单1");

JMenuItem jmi1 = new JMenuItem("菜单项1");

menuBar.add (jmu1);

jmu1.add (jmi1);

jf.setJMenuBar (menuBar);

// 初始化弹窗

inipomnu();

// 创建可以右键显示弹窗的面板

JPanel jp = new JPanel();

jp.setBackground (Color.BLACK);

// 将弹窗设置到面板上

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);

jmi1.addActionListener (uil);

slider.addChangeListener (uil);

// 传递画笔到监听中

uil.g = jf.getGraphics ();

}

JPopupMenu jpopupMenu = new JPopupMenu ();

public void inipomnu(){

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,200,60,35);

g.setColor (Color.WHITE);

g.drawString ("你好", 120, 230);

}

public static void main(String[] args){

new UI ();

}

}

packagecombk.a01ui.zyf0310;

importjavax.swing.*;

importjavax.swing.event.ChangeEvent;

importjavax.swing.event.ChangeListener;

importjava.awt.*;

importjava.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){

// 获取键盘按下的健

// int keyCode = e.getKeyCode ();

// char keyChar = e.getKeyChar ();

//

// System.out.println ("键入" + keyCode + "|" + keyChar);

}

@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 >= 200 && y <= 235){

System.out.println ("你好按钮被点击了~");

g.setColor (Color.BLUE);

g.fillOval (100, 200, 60, 35);

g.setColor (Color.WHITE);

g.drawString ("你好", 120, 230);

}

System.out.println ("鼠标按下");}

@Override

public void mouseReleased(MouseEvent e){

g.setColor (Color.BLACK);

g.fillOval (100, 200, 60, 35);

g.setColor (Color.WHITE);

g.drawString ("你好", 120, 230);

System.out.println ("鼠标松开");

}

@Override

public void mouseEntered(MouseEvent e){

// System.out.println ("鼠标进入窗体");

}

@Override

public void mouseExited(MouseEvent e){

// System.out.println ("鼠标离开窗体");

}

@Override

public void mouseDragged(MouseEvent e){

// System.out.println ("鼠标拖动");

}

@Override

public void mouseMoved(MouseEvent e){

// System.out.println ("鼠标移动");

}

@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、付费专栏及课程。

余额充值