提问者:小点点

找出焦点变化是通过在Swing中单击选项卡还是鼠标完成的


当这个JTextField获得焦点时,我有一个Focus usListener来选择JTextField中的所有文本:

final FocusListener fl= new FocusAdapter() {
 @Override
 public void focusGained(FocusEvent e) {
    final JTextField tf= (JTextField) e.getComponent();
    tf.selectAll();
  }

  @Override
  public void focusLost(FocusEvent e) {
    final JTextField tf= (JTextField) e.getComponent();
    tf.select(-1, -1);
  }
}

但是,我希望只有当用户使用tab键切换焦点时才会发生这种情况。如果用户点击了新组件,就不应该发生这种情况。但是Focus usEvent没有提供这样的信息。有办法区分这些情况吗?


共2个答案

匿名用户

这可以为一个JTextField完成工作(您可以将其转换为更多)(这不是好方法),但它有效…我制作了一个窗口(框架)并添加了两个JTextField(字段1,字段2)我使用您提供的Focus uslistener(不完全是)。我使用标志来保持它的工作。让我知道你的工作是否完成了….

import java.awt.FlowLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class cl  implements MouseListener{ 

  private boolean flag=false;

  JFrame frame = new JFrame();
  JTextField field = new JTextField(10);
  JTextField field2 = new JTextField(10);

public cl(){ //Constructor

    frame.setSize(100,350);
    frame.setLocationRelativeTo(null);
    frame.setLayout(new FlowLayout());



    frame.add(field);
    frame.add(field2);


    frame.setVisible(true);

    field.addMouseListener(this); //add MouseListene to JTextField field.       

    field.addFocusListener(new FocusListener(){

        @Override
        public void focusGained(FocusEvent e) {
          if(flag==true){ //if flag=true;
            final JTextField tf= (JTextField) e.getComponent();
            tf.selectAll();
            flag=false;
            }

        }

        @Override
        public void focusLost(FocusEvent e) {
            if(flag==false){  //if flag=false;
             final JTextField tf= (JTextField) e.getComponent();
                tf.select(-1, -1);
             flag=true;}

        }

    });
}


public static void main(String[] args){
    new cl();
}


@Override
public void mouseClicked(MouseEvent e) {
    flag=false;

}


@Override
public void mousePressed(MouseEvent e) {
    flag=false;

}


@Override
public void mouseReleased(MouseEvent e) {
    flag=false;

}


@Override
public void mouseEntered(MouseEvent e) {
    flag=false;

}


@Override
public void mouseExited(MouseEvent e) {
    flag=false;

}               

}

匿名用户

您只需要检查鼠标是否位于文本字段上方。

final FocusListener fl = new FocusListener () 
{
    @Override
    public void focusGained(FocusEvent e) 
    {
        final JTextField tf= (JTextField) e.getComponent();
        //check for mouse
        if(tf.getMousePosition == null)
        {
            tf.selectAll();
        }
    }

    @Override
    public void focusLost(FocusEvent e) {}
}