GUI 事件监听机制 随笔 有错误请随时提出

创建图形化界面:
1,创建frame窗口。
2,对窗口进行基本设置。
frame.setSize(width,height);frame.setBounds(x,y,width,height);
比如大小,位置,布局。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
frame.add();
5,让窗体显示,通过setVusuble(true)。

事件监听机制的特点:
1,事件源。
2,事件。
3,监听器。
4,事件处理

事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个时间源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一事件的动作(不止一个动作)都封装到了监听器中。

以上三者,在java中已经定义好了。直接获取其对象来用就可以了。我们需要做的事情是对产生的动作进行处理。

想要知道哪个组件具备什么样的特有监听器,需要查看该组件对象的功能。


JFrame 窗体事件:
窗口关闭:
frame.addWindowListener(new WindowLintener{//接口类型的
//有七个方法
});
按理说需要建一个子类实现WindowListener接口,但WindowListener中有七个方法且需要全部重写。

第1种关闭窗口的方法:因为WindowListenner的子类WindoAdapter已经实现了WindowListenner接口。
并且覆盖了其中的所有方法。那么我们只要继承自WindowAdapter重写我们需要的方法即可。//awt包中
class MyWin extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
frame.addWindowListener(new MyWin);



第2种关闭窗口的方法:使用匿名内部类
frame.addWindowListener(new WindowAdapter(){
        //重写WindowAdapter中的windowClosing方法;
public void windowClosing(WindowEvent e){
System.out.println("窗口关闭了");
System.exit(0);
}
public void windowOpened(WindowEvent e){//重写WindowAdapter中的windowOpened方法
System.out.println("窗口打开了");
}
});

Action事件:ActionListener接口是没有适配器的接口(Adapter)。
例:设置一个窗体,给窗体添加一个退出按钮。


此处省略窗体和按钮的设置。

button.addActionListener(new ActionListener(){
//重写ActionListener中的方法

public void actionPerformed(ActionEvent e){

                System.exit(0);

}

});

共性事件:鼠标、键盘事件。
鼠标事件:button.addActionListener(), button.addMouseListener()

1、
button.addActionListener(new ActionListener(){
public void actionPerfomed(ActionEvent e){//发生在鼠标点击之后,且按钮活动之后就会被执行,包括回车键
System.out.println("按钮活动");
}
});

2、
button.addMouseListener(new MouseAdapter){//MouseListener的API中有关于MouseListener的适配器所以这里使用MouseAdapter。//awt包中
public void mouseEetered(MouseEvent e){
System.out.println("鼠标进入到该组件");
}
public void mouseCkicked(MouseEvent e){
System.out.println("鼠标点击该组件");
}
});

3、
//需要重写MouseListener中的7个方法
button.addMouseListener(new MouseListener() {

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标释放");
}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标按下");
}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标离开");
}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标进入");
}

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标点击");
}
});

键盘事件:
button.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e){
System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"..."+e.getKeyCode());
//Event.getKeyText() 是通过被按下的键的代码获得键名 e.getKeyCode() 是获得被按下的键的代码
}


@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}


@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}
});


例1、按回车关闭窗口:
frame.addKeyListener(new KeyListener(){


public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_ENTER){
System.exit(0);
}


@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}


@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}
});


例2、按Alt+F4关闭窗口:
frame.addKeyListener(new KeyListener(){


public void keyPressed(KeyEvent e){
if(e.isAltDown() && e.getKeyCode()==KeyEvent.VK_F4){
System.exit(0);
}
}


@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}


@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}
});


例3、屏蔽按键:在field中只允许输入数字
field.addKeyListener(new KeyListener() {


@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub


}


@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub


}


@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
int keyChar = e.getKeyChar();
if(!(keyChar>=KeyEvent.VK_0 && keyChar<=KeyEvent.VK_9)){
e.consume();//屏蔽非法输入
}
}
});

猜你喜欢

转载自blog.csdn.net/weixin_41800431/article/details/80924520