Как предотвратить чтение ввода из текстового поля, если текстовое поле отключено

В настоящее время я делаю форму, которая включает текстовые поля и флажки. Я уже связал флажок с текстовым полем, и если флажок ВЫБРАН, текстовое поле включено; пока флажок НЕ ВЫБРАН, текстовое поле отключено.

Теперь моя проблема заключается в том, что если пользователи установят флажок и введут какое-либо значение в текстовое поле, а затем снова снимут флажок, моя программа все равно будет считывать ввод из отключенного текстового поля. Есть ли способ преодолеть эту проблему? Ниже моя кодировка:

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

person Chuah Cheng Jun    schedule 18.11.2014    source источник
comment
вы также должны быть готовы к соглашениям о коде. (torsten-horn.de/techdocs/java-codingconventions.htm )   -  person huidube    schedule 18.11.2014
comment
+1 за публикацию ответа   -  person huidube    schedule 18.11.2014


Ответы (2)


если вы не хотите, чтобы ваш TF читался, когда он отключен, вы можете легко проверить это.

EDIT: теперь используйте ваш пример:

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.
}
person huidube    schedule 18.11.2014

Вы должны проверять всякий раз, когда выбран JCheckBox, связанный с вашим JTextField. Для этого вы должны использовать метод isSelected() метода JCheckBox.

Пример:

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!");
}
person Bence Kaulics    schedule 18.11.2014
comment
Теперь мне нужно проверить 4 текстовых поля, отключено ли оно, предоставленный вами код предназначен только для 1 текстового поля, я до сих пор не могу понять, как проверить 4 текстовых поля одновременно, только я запускаю оператор exam+ct+quiz+assign == 100. - person Chuah Cheng Jun; 18.11.2014
comment
Может быть if(checkBox1.isSelected() && checkBox2.isSelected() && checkBox3.isSelected() && checkBox4.isSelected()) { //all selected --> texfield inputs are valid } , вы можете поставить все галочки вот так. - person Bence Kaulics; 18.11.2014