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