- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 VK_UP 或 VK_DOWN 移动焦点,以便它可以转到上一个或下一个文本字段。
我该怎么做?
我尝试过使用这个,但没有成功。
private void passwordTFKeyTyped(java.awt.event.KeyEvent evt) {
char c = evt.getKeyChar();
if (c == KeyEvent.VK_UP) {
usernameTF.grabFocus();
}
}
所以我尝试添加“System.out.println(c)”
并且给出的结果是空的(空并不意味着像“”或null这样的空字符串),它更像是UP键不起作用。
非常感谢。
最佳答案
取决于您使用的小部件库。如果您使用 Swing,则获取 InputMap从文本字段中,并向其添加合适的绑定(bind)。最初我希望您可以复制 Tab 和 Shift-Tab 的绑定(bind),但正如我在实验中发现的那样,这些不是各个组件的 InputMap
的一部分。因此,您必须定义新键,并使用 ActionMap
将它们映射到新操作。
您引用的代码将不起作用,因为您应该使用 getKeyCode而不是getKeyChar 。前者对应于那些 VK_
常量,而后者将产生“正常”(即打印)键的字符,并且仅在 KEY_TYPED
事件期间。对于非打印键,永远不会生成 KEY_TYPED
事件,并且在所有其他事件期间,键字符将为 CHAR_UNDEFINED相反。
这些示例是在稍后的编辑中添加的。
我对以下代码进行了双重许可:您可以根据 CC-Wiki 的条款或 GPL 版本 3 或更高版本的条款使用它。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class SO11380406a {
static final Object focusNextKey = new Object();
static final Object focusPrevKey = new Object();
static final Action focusNextAction = new AbstractAction("focusNext") {
public void actionPerformed(ActionEvent e) {
((Component)e.getSource()).transferFocus();
}
};
static final Action focusPrevAction = new AbstractAction("focusPrev") {
public void actionPerformed(ActionEvent e) {
((Component)e.getSource()).transferFocusBackward();
}
};
static final KeyStroke down = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0);
static final KeyStroke up = KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0);
private static void remap(JComponent c) {
ActionMap am = new ActionMap();
am.put(focusNextKey, focusNextAction);
am.put(focusPrevKey, focusPrevAction);
am.setParent(c.getActionMap());
c.setActionMap(am);
InputMap im = new InputMap();
im.put(down, focusNextKey);
im.put(up, focusPrevKey);
im.setParent(c.getInputMap(JComponent.WHEN_FOCUSED));
c.setInputMap(JComponent.WHEN_FOCUSED, im);
}
public static void main(String[] args) {
JFrame frm = new JFrame("SO Question 11380406 Demo A");
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.getContentPane().setLayout(new GridLayout(2, 1));
JTextField a = new JTextField(80), b = new JTextField(80);
frm.getContentPane().add(a);
frm.getContentPane().add(b);
frm.pack();
remap(a);
remap(b);
frm.setLocationByPlatform(true);
frm.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class SO11380406b {
static final KeyListener arrowFocusListener = new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getModifiers() == 0) {
if (e.getKeyCode() == KeyEvent.VK_DOWN)
e.getComponent().transferFocus();
if (e.getKeyCode() == KeyEvent.VK_UP)
e.getComponent().transferFocusBackward();
}
}
};
private static void remap(Component c) {
c.addKeyListener(arrowFocusListener);
}
public static void main(String[] args) {
JFrame frm = new JFrame("SO Question 11380406 Demo B");
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.getContentPane().setLayout(new GridLayout(2, 1));
JTextField a = new JTextField(80), b = new JTextField(80);
frm.getContentPane().add(a);
frm.getContentPane().add(b);
frm.pack();
remap(a);
remap(b);
frm.setLocationByPlatform(true);
frm.setVisible(true);
}
}
关于java - 如何使用 VK_UP 或 VK_DOWN 移动到上一个或下一个文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11380406/
我想使用 VK_UP 或 VK_DOWN 移动焦点,以便它可以转到上一个或下一个文本字段。 我该怎么做? 我尝试过使用这个,但没有成功。 private void passwordTFKeyType
我是一名优秀的程序员,十分优秀!