gpt4 book ai didi

Java Swing JTextField setInputVerifier 保持关注 TextField

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:27 26 4
gpt4 key购买 nike

我有一个public class JdbDateTextField extends JTextField,在构造函数中我添加了this.setInputVerifier(new ValidDateOrEmptyVerifier());

我使用 class ValidDateOrEmptyVerifier extends InputVerifier 来验证输入的格式。

如果输入格式错误并且用户失去了对 JdbDateTextField 的关注,我会在 ValidDateOrEmptyVerifier 中返回 false 并且焦点再次获得到 JdbDateTextField

如果用户从 JdbDateTextField 切换到另一个 textField 或按下按钮,这将起作用。如果按下按钮并且输入的格式错误,则不会执行按钮的任何操作并且焦点仍位于 JdbDateTextField

这正是我想要的。在输入有效字符串之前,用户不能离开 JdbDateTextField

问题是 JdbDateTextField 位于 JTabbedPane 中的 JPanel 中,因此我有一个带有多个选项卡的 GUI。

如果我选择了 JdbDateTextField,输入无效输入,然后直接单击另一个选项卡,它仍然会切换选项卡。所以我能够提供错误的输入。

我的问题是:

有没有一种方法可以执行输入验证,在它为 true 之前不允许执行任何其他事件

最佳答案

我能想到的最佳解决方案是为 JTabbedPane 分配一个自定义选择模型,该模型拒绝允许更改选项卡,除非当前 InputVerifier 成功:

int index = tabbedPane.getSelectedIndex();

tabbedPane.setModel(new DefaultSingleSelectionModel() {
@Override
public void setSelectedIndex(int index) {
Component focusOwner =
FocusManager.getCurrentManager().getFocusOwner();

if (focusOwner instanceof JComponent) {
JComponent c = (JComponent) focusOwner;
InputVerifier verifier = c.getInputVerifier();
if (verifier != null && !verifier.shouldYieldFocus(c)) {
return;
}
}

super.setSelectedIndex(index);
}
});

tabbedPane.setSelectedIndex(index);

关于Java Swing JTextField setInputVerifier 保持关注 TextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com