Java - 请求关注当前元素

Posted

技术标签:

【中文标题】Java - 请求关注当前元素【英文标题】:Java - requestFocus on current Element 【发布时间】: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();
    

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于Java - 请求关注当前元素的主要内容,如果未能解决你的问题,请参考以下文章

markdown [根据当前请求域名创建url]使用UriComponentsBuilder根据当前请求的域名来创建新的url #java

使用 Ajax 请求创建元素和 appendChild

请求关注 JavaFX 阶段不会更改 macOS 左上角菜单栏标题

java爬虫技术整理

如何处理高并发量的HTTP请求

多部分表单数据输入 Java 模型属性未在请求类中注入元素 - Spring Boot