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

被折叠的 条评论
为什么被折叠?



