Java - requestFocus 当前元素
Java - requestFocus on current Element
我遇到了一个问题,我对输入字段进行了正则表达式检查,如果输入不正确,我按 Tab 进行检查,通常会移动到下一个元素,它应该留在当前领域。但是由于正常的选项卡策略,它会移动到下一个元素,即使我请求关注当前元素,它仍然会移动到下一个元素。
事先感谢您的帮助:)
这是我的代码片段:
}else if(comp.getName().equals("input_dauer")){
System.out.println("Test3");
final Pattern pattern = Pattern.compile("^[\d]{0,}[,.]+[\d]{1,3}$");
if (!pattern.matcher(input_dauer.getText()).matches()) {
lblDauer.setForeground(Color.red);
MandatoryDauer = 0;
comboBox_aktivitaet.requestFocus();
input_dauer.requestFocus();
}
else{
lblDauer.setForeground(Color.decode("#1E2F3F"));
MandatoryDauer = 1;
textArea_beschreibung.requestFocus();
}
您可以使用 setFocusTraversalKeysEnabled(false)
禁用 JTextField
(或任何您的 Component
)的焦点遍历键,并在需要时手动转移焦点。
在下面的例子中,如果文本长度小于5个字符,则视为无效,因此我们不转移焦点。
如果有效(长度>=5),如果我们想坚持逻辑焦点顺序,我们使用 transferFocus()
转移焦点,或者 requestFocus()
转移到特定组件。
添加了一个虚拟按钮,以便您可以观察焦点行为。
JPanel contentPane = new JPanel();
JFrame fr = new JFrame();
JButton someButton = new JButton("Button");
JTextField textField = new JTextField(10);
textField.setFocusTraversalKeysEnabled(false);
textField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(final KeyEvent ke) {
JTextField source = (JTextField) ke.getSource();
if (ke.getKeyCode() == KeyEvent.VK_TAB) {
if (source.getText().length() >= 5) {
System.out.println("Tab with valid text, transferring focus");
source.transferFocus();// or someButton.requestFocus()
} else {
System.out.println("Tab with invalid text");
}
}
}
});
contentPane.add(textField);
contentPane.add(someButton);
fr.setContentPane(contentPane);
fr.pack();
fr.setVisible(true);
我遇到了一个问题,我对输入字段进行了正则表达式检查,如果输入不正确,我按 Tab 进行检查,通常会移动到下一个元素,它应该留在当前领域。但是由于正常的选项卡策略,它会移动到下一个元素,即使我请求关注当前元素,它仍然会移动到下一个元素。
事先感谢您的帮助:)
这是我的代码片段:
}else if(comp.getName().equals("input_dauer")){
System.out.println("Test3");
final Pattern pattern = Pattern.compile("^[\d]{0,}[,.]+[\d]{1,3}$");
if (!pattern.matcher(input_dauer.getText()).matches()) {
lblDauer.setForeground(Color.red);
MandatoryDauer = 0;
comboBox_aktivitaet.requestFocus();
input_dauer.requestFocus();
}
else{
lblDauer.setForeground(Color.decode("#1E2F3F"));
MandatoryDauer = 1;
textArea_beschreibung.requestFocus();
}
您可以使用 setFocusTraversalKeysEnabled(false)
禁用 JTextField
(或任何您的 Component
)的焦点遍历键,并在需要时手动转移焦点。
在下面的例子中,如果文本长度小于5个字符,则视为无效,因此我们不转移焦点。
如果有效(长度>=5),如果我们想坚持逻辑焦点顺序,我们使用 transferFocus()
转移焦点,或者 requestFocus()
转移到特定组件。
添加了一个虚拟按钮,以便您可以观察焦点行为。
JPanel contentPane = new JPanel();
JFrame fr = new JFrame();
JButton someButton = new JButton("Button");
JTextField textField = new JTextField(10);
textField.setFocusTraversalKeysEnabled(false);
textField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(final KeyEvent ke) {
JTextField source = (JTextField) ke.getSource();
if (ke.getKeyCode() == KeyEvent.VK_TAB) {
if (source.getText().length() >= 5) {
System.out.println("Tab with valid text, transferring focus");
source.transferFocus();// or someButton.requestFocus()
} else {
System.out.println("Tab with invalid text");
}
}
}
});
contentPane.add(textField);
contentPane.add(someButton);
fr.setContentPane(contentPane);
fr.pack();
fr.setVisible(true);