gpt4 book ai didi

java - 根据 JTextField 验证,暂时禁用 JDialog 上的确定按钮

转载 作者:行者123 更新时间:2023-12-04 06:11:18 24 4
gpt4 key购买 nike

我创建了一个 JDialog in a fashion like this ,根据 Oracle 的 tutorial .

使用 JOptionPane 构造函数:

optionPane = new JOptionPane(array,
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION,
null,
options,
options[0]);

我没有提到"is"和“否”按钮,因为它们是由 JOptionPane 构造函数创建的。

现在,在我的对话框中,我有一个 JFormattedText 字段,其中包含一个由我创建的 InputValidator,它可以持续验证文本字段的输入:
public class ValidatedDoubleField extends InputVerifier implements DocumentListener {

private JTextField field;
private Border defaultBorder;
public ValidatedDoubleField(JFormattedTextField f){
this.field = f;
this.defaultBorder = f.getBorder();
f.getDocument().addDocumentListener(this);
}
@Override
public boolean verify(JComponent input) {
//System.out.println("verify");
if (input instanceof JTextField){
JTextField f = (JTextField)input;

try{
Double value = Double.parseDouble(f.getText().replace(',', '.'));
return true;
}catch (NumberFormatException e){
return false;
}
}else if (input instanceof JFormattedTextField){
JFormattedTextField f = (JFormattedTextField)input;

try{
Double value = Double.parseDouble(f.getText().replace(',', '.'));
return true;
}catch (NumberFormatException e){
return false;
}
}
return false;
}
public boolean shouldYieldFocus(JComponent input){

boolean inputOK = verify(input);
if (inputOK) {
if (input instanceof JTextField){

JTextField f = (JTextField)input;
f.setBorder(defaultBorder);
return true;
}else if (input instanceof JFormattedTextField){

JFormattedTextField f = (JFormattedTextField)input;

f.setBorder(defaultBorder);
return true;
}else
return false;
} else {
if (input instanceof JTextField){

JTextField f = (JTextField)input;

f.setBorder(BorderFactory.createLineBorder(Color.red));
Toolkit.getDefaultToolkit().beep();
return false;
}else if (input instanceof JFormattedTextField){

JFormattedTextField f = (JFormattedTextField)input;

f.setBorder(BorderFactory.createLineBorder(Color.red));
Toolkit.getDefaultToolkit().beep();
return false;
}else
return false;
}
//return true;

}
@Override
public void changedUpdate(DocumentEvent e) {

this.field.getInputVerifier().shouldYieldFocus(field);
}
@Override
public void insertUpdate(DocumentEvent e) {

this.field.getInputVerifier().shouldYieldFocus(field);
}
@Override
public void removeUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
this.field.getInputVerifier().shouldYieldFocus(field);
}

}

我发布了 InputVerifier 代码,即使它与问题无关。

现在我想做的是暂时禁用“确定”按钮,直到该字段被验证为止,但我没有引用它。

我该怎么做?

我正在寻找类似的东西:
JButton b = optionPane.getOkButton();
if (myFieldNotValidate)
b.setEnabled(false);

最佳答案

您可以尝试这样的操作来定位 JOptionPane 对话框中的按钮。

public class Snippet {

public static void main(String[] args) {
JOptionPane optionPane = new JOptionPane("Test",
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION,
null);

List<JButton> buttons = new ArrayList<JButton>();

loadButtons(optionPane, buttons);

}

public static void loadButtons(JComponent comp, List<JButton> buttons) {
if (comp == null) {
return;
}

for (Component c : comp.getComponents()) {
if (c instanceof JButton) {
buttons.add((JButton) c);

} else if (c instanceof JComponent) {
loadButtons((JComponent) c, buttons);
}
}
}

}

关于java - 根据 JTextField 验证,暂时禁用 JDialog 上的确定按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7740778/

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