实现焦点事件监听中如何获得当前需要监听的组件
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame {
private final JPanel jcp;
private JTextField[] textFields;
// 主函数
public static void main(String[] args) {
// 新建窗体
test frame = new test();
// 显示窗体
frame.setVisible(true);
}
public test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体大小
setSize(new Dimension(295 140));
setLocationRelativeTo(null);
// 根面板
jcp = new JPanel();
// 设置布局
jcp.setLayout(new GridLayout(4,3,2,2));
textFields = new JTextField[12];
for(int i=0;i<textFields.length;i++){
textFields[i] = new JTextField("CTRL + " + i);
jcp.add(textFields[i]);
//++++++++++++++++++++++textField焦点事件监听++++++++++++++++++++
textFields[i].addFocusListener(new TextFocusListener());
}
setContentPane(jcp);
}
//++++++++++++++++++++++textField实现焦点事件监听++++++++++++++++++++
private final class TextFocusListener implements FocusListener {
// 获得焦点
public void focusGained(FocusEvent e) {
// 选中输入框时选中当前输入框的全部内容 textFields[i].selectAll();
// 如果当前输入框的内容是 CTRL + i 的话则 textFields[i].setText("");
/*
* 这里的代码如何实现?
* 主要是想能在这一个类中直接获取当前是哪个textField焦点事件监听
*/
}
// 丢失焦点
public void focusLost(FocusEvent e) {}
}
//++++++++++++++++++++++textField实现焦点事件监听++++++++++++++++++++
} 展开
这个很简单 你只需要给每个控件设置一个name就行了,
代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test1 extends JFrame {
private final JPanel jcp;
private JTextField[] textFields;
// 主函数
public static void main(String[] args) {
// 新建窗体
test1 frame = new test1();
// 显示窗体
frame.setVisible(true);
}
public test1() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体大小
setSize(new Dimension(295, 140));
setLocationRelativeTo(null);
// 根面板
jcp = new JPanel();
// 设置布局
jcp.setLayout(new GridLayout(4, 3, 2, 2));
textFields = new JTextField[12];
for (int i = 0; i < textFields.length; i++) {
textFields[i] = new JTextField("CTRL + " + i);
textFields[i] .setName(String.valueOf(i));
jcp.add(textFields[i]);
// ++++++++++++++++++++++textField焦点事件监听++++++++++++++++++++
textFields[i].addFocusListener(new TextFocusListener());
}
setContentPane(jcp);
}
// ++++++++++++++++++++++textField实现焦点事件监听++++++++++++++++++++
private final class TextFocusListener implements FocusListener {
// 获得焦点
public void focusGained(FocusEvent e) {
Component comp = e.getComponent();
if (comp instanceof JTextField){
JTextField jt = (JTextField)comp;
jt.selectAll();
int index= Integer.parseInt(jt.getName());
if (jt.getText().equals("CTRL + " + index)) {
jt.setText("");
}
}
// 选中输入框时选中当前输入框的全部内容 textFields[i].selectAll();
// 如果当前输入框的内容是 CTRL + i 的话则 textFields[i].setText("");
/*
* 这里的代码如何实现? 主要是想能在这一个类中直接获取当前是哪个textField焦点事件监听
*/
}
// 丢失焦点
public void focusLost(FocusEvent e) {
}
}
// ++++++++++++++++++++++textField实现焦点事件监听++++++++++++++++++++
}
JTextField txt = (JTextField)e.getSource();
}
这样可以得到当前触发事件的对象。
那我应该怎样知道它是 textFields[i] 中的哪一个呢?
这个j就是事件源的对象
那我应该怎样知道它是 textFields[i] 中的哪一个呢?
根本不需要知道它是textFields[i] 中的哪一个...
你只要知道这个就是当前鼠标焦点所指向的那个就行了