【问题标题】:Java - requestFocus on current ElementJava - 请求关注当前元素
【发布时间】:2017-04-13 07:42:35
【问题描述】:

我遇到的问题是我对输入字段进行了正则表达式检查,如果输入不是应有的,我按 Tab 键检查并通常移动到下一个元素,它应该停留在当前领域。但是由于正常的选项卡策略,它会移动到下一个元素,即使我请求关注当前元素,它仍然会移动到下一个元素。

提前感谢您的帮助:)

这是我的代码 sn-p:

}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();
    }

【问题讨论】:

    标签: java focus policy


    【解决方案1】:

    您可以使用setFocusTraversalKeysEnabled(false) 禁用JTextField(或任何您的Componentis)的焦点遍历键,并在需要时手动转移焦点。

    在以下示例中,如果文本长度小于 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多