实现焦点事件监听中如何获得当前需要监听的组件

packagecom.view;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publiccla... package com.view;
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实现焦点事件监听++++++++++++++++++++
}
展开
 我来答
R夏至未至H
推荐于2016-09-28 · TA获得超过469个赞
知道小有建树答主
回答量:273
采纳率:100%
帮助的人:356万
展开全部

这个很简单  你只需要给每个控件设置一个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实现焦点事件监听++++++++++++++++++++
}

百度网友845f74e61
2013-06-19 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1633万
展开全部
public void focusGained(FocusEvent e) {

JTextField txt = (JTextField)e.getSource();

}

这样可以得到当前触发事件的对象。
追问
那我应该怎样知道它是 textFields[i] 中的哪一个呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
没有响应m2
2013-06-19 · TA获得超过8387个赞
知道大有可为答主
回答量:7579
采纳率:33%
帮助的人:3509万
展开全部
JTextField j = (JTextField)e.getSource();
这个j就是事件源的对象
追问
那我应该怎样知道它是 textFields[i] 中的哪一个呢?
追答
根本不需要知道它是textFields[i] 中的哪一个...

你只要知道这个就是当前鼠标焦点所指向的那个就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式