【问题标题】:How to prevent reading input from text field if text field is disabled如果禁用文本字段,如何防止从文本字段读取输入
【发布时间】:2014-11-18 08:07:47
【问题描述】:

我目前正在做一个涉及文本字段和复选框的表单。我已经将复选框链接到文本字段,如果复选框被选中,则启用文本字段;当复选框被取消选中时,文本字段被禁用。

我现在的问题是,如果用户选择复选框并在文本字段中输入一些值,然后再次取消选中该复选框,我的程序仍会从禁用的文本字段中读取输入。有没有办法克服这个问题?以下是我的编码:

 private void pnl1submitbtnActionPerformed(java.awt.event.ActionEvent evt) {                                              
    moduleFunc moduleFunc;
    String module = moduletxtfield.getText();
    double exam = Double.parseDouble(examtextfield.getText());
    double ct = Double.parseDouble(cttextfield.getText());
    double quiz = Double.parseDouble(quiztextfield.getText());
    double assign = Double.parseDouble(asstextfield.getText());
    try {
        if (module.trim().isEmpty()) {
            moduleerrorlbl.setText("Field cannot be empty");
        }
        else if (!(exam+ct+quiz+assign == 100)) {
            markerrorlbl.setText("Total marks must be 100");
        }
        else
        {
            markerrorlbl.setText("");
            moduleerrorlbl.setText("");
        }

谢谢。

已编辑:

谢谢大家,我已经弄清楚它是如何工作的。

 private void pnl1submitbtnActionPerformed(java.awt.event.ActionEvent evt) {                                              
    moduleFunc moduleFunc;
    String module = moduletxtfield.getText();
    double exam = 0.0, assign = 0.0, quiz = 0.0, ct = 0.0;
   try {
        if (module.trim().isEmpty()) {
            moduleerrorlbl.setText("Field cannot be empty");
        }
        else if (OODJ.moduleRecord.containsKey(module)) {
            moduleerrorlbl.setText("Module already exists!");
        }
        else {
            if (examchkbox.isSelected()) {
            exam = Double.parseDouble(examtextfield.getText());
            }
            if(ctchkbox.isSelected()) {
            ct = Double.parseDouble(cttextfield.getText());    
            }
            if(quizchkbox.isSelected()) {
            quiz = Double.parseDouble(quiztextfield.getText());    
            }
            if(asschkbox.isSelected()) {
            assign = Double.parseDouble(asstextfield.getText());    
            }
            if (!(exam + ct + quiz + assign == 100)) {
            markerrorlbl.setText("Total marks must be 100");
            }
            else {
            // self-coded
            }
            }
        }
    catch (Exception ex) {
        JOptionPane.showMessageDialog(null, ex);
    }

【问题讨论】:

标签: java jtextfield jcheckbox


【解决方案1】:

无论何时选择链接到您的JTextFieldJCheckBox,您都必须进行检查。为此,您必须使用JCheckBoxisSelected() 方法。

例子:

if(checkBox.isSelected())
{
    if (module.trim().isEmpty())
    {
        moduleerrorlbl.setText("Field cannot be empty");
    }
    else if (!(exam+ct+quiz+assign == 100))
    {
        markerrorlbl.setText("Total marks must be 100");
    }
    else
    {
        markerrorlbl.setText("");
        moduleerrorlbl.setText("");
    }
}
else
{
    System.out.println("The textfield is disabled!");
}

【讨论】:

  • 现在我有 4 个文本字段需要检查是否禁用,您提供的代码仅适用于 1 个文本字段,我仍然无法弄清楚如何一次验证 4 个文本字段只有我运行语句exam+ct+quiz+assign == 100
  • 可能是if(checkBox1.isSelected() && checkBox2.isSelected() && checkBox3.isSelected() && checkBox4.isSelected()) { //all selected --> texfield inputs are valid },你可以像这样勾选所有的复选框。
【解决方案2】:

如果您不希望您的 TF 在禁用时被读取,您可以轻松检查它。

编辑:现在使用您的示例:

private void pnl1submitbtnActionPerformed(java.awt.event.ActionEvent evt {                                         
    moduleFunc moduleFunc;
    String module = moduletxtfield.getText();
    double exam = 0, ct = 0, quiz = 0, assign = 0;
    if(examtextfield.isEnabled())
        exam = Double.parseDouble(examtextfield.getText());
    if(cttextfield.isEnabled())
        ct = Double.parseDouble(cttextfield.getText());
    if(quiztextfield.isEnabled())
        quiz = Double.parseDouble(quiztextfield.getText());
    if(asstextfield.isEnabled())
        assign = Double.parseDouble(asstextfield.getText());
    try {
        if (module.trim().isEmpty()) {
            moduleerrorlbl.setText("Field cannot be empty");
        }
        else if (!(exam+ct+quiz+assign == 100)) {
            markerrorlbl.setText("Total marks must be 100");
        }
        else
        {
            markerrorlbl.setText("");
            moduleerrorlbl.setText("");
        }
    }
    //do whatever you want with your double values.
}

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2020-05-24
    相关资源
    最近更新 更多