Используйте setEnabled, чтобы включить кнопку, если указанные c текстовые поля заполнены - PullRequest
2 голосов
/ 07 апреля 2020

У меня есть проект, в котором я должен включить и отключить использование кнопок (addRn, addSw и addCy) с помощью setEnabled () . Я пробовал много вещей, включая добавление documentListener, но я слишком запутался. У кого-нибудь есть идея, что делать?

  ArrayList<JTextField> run = new ArrayList<>();
        run.add(intervals);
        run.add(minRest);

        ArrayList<JTextField> swim = new ArrayList<>();
        swim.add(intervals);
        swim.add(minRest);
        swim.add(loc);

        ArrayList<JTextField> cycle = new ArrayList<>();
        cycle.add(tempo);
        cycle.add(terrain);

        DocumentListener listener = new DocumentListener() {
            @Override
            public void removeUpdate(DocumentEvent e) {
                changedUpdate(e);
            }

            @Override
            public void insertUpdate(DocumentEvent e) {
                changedUpdate(e);

            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                boolean canEnable = true;
                for (JTextField intervals : run) {
                    intervals.getDocument().addDocumentListener(listener);
                    if (intervals.getText().isEmpty()) {
                        canEnable = false;
                    }
                }
                for (JTextField minRest : run) {
                    if (minRest.getText().isEmpty()) {
                        canEnable = false;
                    }
                }
                addRn.setEnabled(canEnable);
            }
        };

Это то, что у меня есть до сих пор, но я чувствую, что здесь немного упущено, и я недостаточно знаком, чтобы найти проблему. Я попытался приблизиться к этому, как было предложено здесь

1 Ответ

1 голос
/ 09 апреля 2020

ОБНОВЛЕНИЕ Мне удалось выяснить это

public class TrainingRecordGUI extends JFrame implements ActionListener, DocumentListener {

добавить DocumentListener в publi c class

, а затем зарегистрировать DocumentListener с текстовыми полями, которые вы хотите используйте

public TrainingRecordGUI() {
 add(intervals);
        intervals.setEditable(true);
        intervals.getDocument().addDocumentListener(this); //addDocumentListener for button enabling
 add(labminr);
        add(minRest);
        minRest.setEditable(true);
        minRest.getDocument().addDocumentListener(this);//addDocumentListener for button enabling
        add(labloc);
        add(loc);
        loc.setEditable(true);
        loc.getDocument().addDocumentListener(this);//addDocumentListener for button enabling
        add(labter);
        add(terrain);
        terrain.setEditable(true);
        terrain.getDocument().addDocumentListener(this);//addDocumentListener for button enabling
        add(labtempo);
        add(tempo);
        tempo.setEditable(true);
        tempo.getDocument().addDocumentListener(this);//addDocumentListener for button enabling
}

, затем добавьте окончательный код для случаев, когда кнопка должна быть включена, а когда нет

// Button enabling/disabling code

@Override
public void insertUpdate(DocumentEvent e) {
    changedUpdate(e);

}

@Override
public void removeUpdate(DocumentEvent e) {
    changedUpdate(e);

}

@Override
public void changedUpdate(DocumentEvent e) {
    //boolean variables to set run, swim and cycle button enabled
    boolean canEnableRn = false;
    boolean canEnableSw = false;
    boolean canEnableCy = false;

    //if anything but necessary fields for run filled
       if (intervals.getText().equals("") && minRest.getText().equals("") 
               || !intervals.getText().equals("") && minRest.getText().equals("") 
               || intervals.getText().equals("") && !minRest.getText().equals("")
               || !loc.getText().equals("") && !terrain.getText().contentEquals("") && !tempo.getText().equals("")) {
           canEnableRn = false; // set canEnableRn false to prevent the button to be enabled
       }else { canEnableRn = true;} //else set true and allow user to add to run
       addRn.setEnabled(canEnableRn); // set button to boolean value
}
...