Java焦点事件
组件是可以触发焦点事件的.组件可以使用addFocusListener(FocusListener listener)
注册焦点事件
创建的监视器必须实现FocusListener
接口//改接口有两个方法
-
public void focusGained(FocusEvent e)
//获取焦点 -
public void focusLost(FocusEvent e)
//失去焦点
简单的例子
首先创建一个实现FocusListener
接口的类
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
public class Focus implements FocusListener {
myWindow view;
public void setView(myWindow view) {
this.view = view;
}
@Override
public void focusGained(FocusEvent focusEvent) { //获取焦点时
if (focusEvent.getSource() == view.jTextField){
view.jTextField.setBackground(new Color(0x674553));
}
else if(focusEvent.getSource() == view.jButton){
view.jButton.setText("Gained");
}
}
@Override
public void focusLost(FocusEvent focusEvent) { //失去焦点时
if (focusEvent.getSource() == view.jTextField){
view.jTextField.setBackground(new Color(0xFFFFFF));
}
else if(focusEvent.getSource() == view.jButton){
view.jButton.setText("Lost");
}
}
}
然后创建JFrame的子类
import javax.swing.*;
import java.awt.*;
public class myWindow extends JFrame {
Focus focus; //实现了焦点接口的类
JTextField jTextField;
JButton jButton;
myWindow(){
setTitle("焦点事件");
setBounds(300,300,400,400);
setLayout(new FlowLayout()); //设置流体布局
Container con = this.getContentPane();
con.setBackground(new Color(0x366728));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
init();
validate(); //验证操作
}
public void init(){
focus = new Focus();
focus.setView(this);
jTextField = new JTextField("0",10);
jTextField.addFocusListener(focus);
add(jTextField);
jButton = new JButton("ENTER");
jButton.addFocusListener(focus);
add(jButton);
}
}
最后进行测试
public class Example {
public static void main(String[] args) {
myWindow myWindow = new myWindow();
}
}
运行结果
键盘事件
当一个组件处于激活状态时,通过敲击键盘可以触发键盘事件
-
addKeyListener(KeyListener listener)
//想组件注册键盘监视器
使用KeyListener接口处理键盘事件有3种方法
-
public void keyPressed(KeyEvent e)
//当用户在键盘上按下某个键时 -
public void keyReleased(KeyEvent e)
//当用户在键盘是释放某个键时 -
public void keyTyped(KeyEvent e)
//当用户在键盘上按下某个键接着又释放时
另外KeyEvent事件的方法
-
public int getKeyCode()
//该方法返回一个键码值/通过该方法可以判断用户按下了键盘上的哪个值
下面的例子是用户输入序列号是自动换行的例子
首先创建一个实现了焦点接口和键盘接口的类
import javax.swing.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Key implements FocusListener, KeyListener { //实现了焦点接口和键盘接口的监视器
myWindow view;
public void setView(myWindow view) {
this.view = view;
}
@Override
public void focusGained(FocusEvent focusEvent) {
JTextField jTextField = (JTextField)focusEvent.getSource(); //获取当前事件源
jTextField.setText(null); //当获取焦点时将文本框设为空
}
@Override
public void focusLost(FocusEvent focusEvent) {
}
@Override
public void keyTyped(KeyEvent keyEvent) {
}
@Override
public void keyPressed(KeyEvent keyEvent) {
JTextField textField = (JTextField)keyEvent.getSource(); //文本框获取当前事件源
if (textField.getCaretPosition()>=6){ //当到7个的时候
textField.transferFocus(); //切换焦点
}
}
@Override
public void keyReleased(KeyEvent keyEvent) {
}
}
然后创建JFrame的子类
import javax.swing.*;
import java.awt.*;
public class myWindow extends JFrame {
Key key;
JTextField jTextFields[] = new JTextField[3]; //长度为3的数组
JButton jButton;
myWindow(){
setBounds(300,300,400,400);
setLayout(new FlowLayout()); //设置流体布局
setTitle("序列号输入");
Container con = this.getContentPane();
con.setBackground(new Color(0x366728)); //设置背景颜色
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true); //设置可视化
init();
validate();
}
public void init(){
key = new Key();
key.setView(this); //
for (int i = 0; i <jTextFields.length ; i++) {
jTextFields[i] = new JTextField(7);
jTextFields[i].addFocusListener(key);
jTextFields[i].addKeyListener(key);
add(jTextFields[i]);
}
jButton = new JButton("ENTER");
add(jButton);
jTextFields[0].requestFocusInWindow(); //窗口一打开就获取焦点
}
}
最后可以进行测试
public class Example {
public static void main(String[] args) {
myWindow myWindow = new myWindow();
}
}
运行结果
窗口事件
对于JFrame及子类创建的窗口可以调用setDefaultCloseOperation()
//设置默认的关闭操作DO_NOTHING_ONCLOSE
//关闭时什么都不做HIDE_ON_CLOSE
//隐藏当前窗口DISPOSE_ON_CLOSE
//隐藏当前窗口,并释放窗体占有的其他资源EXIT_ON_ CLOSE
//结束窗口程序
WindowEvent事件源
也就是在窗口发生的事件
另外要明确的是如果要用到WindowEvent事件的话name一开始就不要设置关闭操作
WindowListener接口
-
public void windowOpened(WindowEvent windowEvent)
//当窗口打开时 -
public void windowClosing(WindowEvent windowEvent)
//当窗口正在被关闭时(用的最多
/例如是问你保不保存)
public void windowClosing(WindowEvent windowEvent) {
System.exit(0); //退出程序运行
}
-
public void windowClosed(WindowEvent windowEvent)
//当窗口关闭后 -
public void windowIconified(WindowEvent windowEvent)
//当窗口图标化时(也就是最小化时) -
public void windowDeiconified(WindowEvent windowEvent)
//当窗口撤销图标化时 -
public void windowActivated(WindowEvent windowEvent)
//从非激活状态到激活状态时 -
public void windowDeactivated(WindowEvent windowEvent)
//从激活状态到未激活状态时
由于事项一个接口要不接口内的方法进行重写,那么造成不必要的方法也要将它写出,形成低效
因此Java提供了适配器的概念/例如WindowAdapter类
,因为这个类实现了WindowListener接口,所以它的子类就继承了接口的方法,再所以用他的子类就可以想用哪个方法就对哪个方法进行重写即可/其余的监视器也有相应的适配器
CSS
JavaScript
CET4P164
remind
mechanical
patient
altitude
implement
ditch
gear
brake
data
ignorance
bake
ballon
considerate