再会!
我正在向 jTextField 添加 keyevent 侦听器,以便如果用户按下 Tab 键,插入符号位置将转到 jtextField 内文本的末尾,这是我的代码:
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode()==KeyEvent.VK_TAB){
evt.consume();
jTextField1.setCaretPosition(jTextField1.getText().length());
}
}
但这不起作用。
我怎样才能做到这一点?
一种方法是:
- 首先,不要使用 KeyListener,因为这是一个 Swing 应用程序,并且如果可以避免的话,就不应该在 Swing 应用程序中使用 KeyListener。
- 接下来将 JTextField 的焦点遍历键启用属性设置为 false 通过
jTextField1.setFocusTraversalKeysEnabled(false);
- 然后使用键绑定 http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html,(再次)不是 KeyListener,用于更改该组件的 Tab 键的行为。
例如:
import java.awt.event.*;
import javax.swing.*;
public class OverrideTab {
private static void createAndShowGui() {
JPanel mainPanel = new JPanel();
final JTextField jTextField1 = new JTextField("This is the text", 20);
mainPanel.add(new JButton("Here just to get focus"));
mainPanel.add(jTextField1);
// just to move the caret to position 0 so we can see the key
// bindings code in action
jTextField1.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
jTextField1.setCaretPosition(0);
}
});
// turn tab key as focus traversal off for the component
jTextField1.setFocusTraversalKeysEnabled(false);
// set the key bindings
int condition = JComponent.WHEN_FOCUSED;
InputMap inputMap = jTextField1.getInputMap(condition);
ActionMap actionMap = jTextField1.getActionMap();
String tab = "tab";
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), tab);
actionMap.put(tab, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
jTextField1.setCaretPosition(jTextField1.getText().length());
System.out.println("here");
}
});
JFrame frame = new JFrame("OverrideTab");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
当然,此代码将阻止您从 JTextField 中移出 Tab 键,因此,如果此行为是必要且重要的,您可以使用setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.<KeyStroke>emptySet())
而不是完全禁用焦点遍历。
另外,您想要的行为违背了大多数窗口操作系统的标准,因此您需要有一个非常好的理由来实现这一点,因为您可能会让用户感到困惑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)