当这个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没有提供这样的信息。有办法区分这些情况吗?
这可以为一个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) {}
}