2015-09-07 4 views
0

Я использую keyReleased для включения или отключения jbutton, если два jtextfields пусты или не пусты. Я поместил некоторые инструкции строки печати в метод, чтобы увидеть логические значения по мере выполнения метода. Операции, которые никогда не печатаются, заставляют меня думать, что этот метод не выполняется. Предполагается, что jbutton отключается до тех пор, пока текст не будет введен как в Jtextfields, а затем включен jbutton.keyReleased не выполняет код

CalculateButton.addKeyListener(new KeyAdapter() 
    { 
     @Override 
     public void keyReleased(KeyEvent arg0) 
     { 
      // the two jtextfields being checked for length 
      boolean first = ipAddress.getText().length() > 0; 
      boolean secoundnd = borrowedBits.getText().length() > 0; 

      // print statements of the boolean values 
      System.out.println("IpAddress " + first); 
      System.out.println("borrowedBits" + secoundnd); 


      // if statements checking to see if the button should be enabled 
      or disabled after each key press. 
      if (ipAddress.getText().length() > 0 && borrowedBits.getText().length() > 0) 
      { 
       CalculateButton.setEnabled(true);; 

      } 

      if (ipAddress.getText().length() == 0 || borrowedBits.getText().length() == 0) 
      { 
       CalculateButton.setEnabled(false);; 

      } 




     } 
+0

добавить ключевой прослушиватель в текстовые поля, а не кнопку. Если он отключен, метод не будет вызван. – Dando18

+0

Благодарим за помощь! – chrislbaird

+0

Имена переменных не должны начинаться с символа верхнего регистра. Некоторые из ваших переменных правильны, а некоторые нет. Будьте последовательны и учитесь на примерах, которые вы найдете в книгах, учебниках и т. Д. – camickr

ответ

1

Если кнопка отключена при отпускании ключа, метод все равно не будет вызываться. Вам необходимо прикрепить KeyAdapter к обоим текстовым полям, которые остаются включенными.

textField.addKeyListener(new KeyAdapter() 
    { 
     @Override 
     public void keyReleased(KeyEvent arg0) 
     { 
      ... 
     } 
    }); 
+0

На самом деле ему нужно добавить его в * оба * текстовых поля. –

+0

@GergelyBacso кричит, вот что я намеревался сказать, но, наверное, мои пальцы набрали что-то еще. Я сделал редактирование. Благодаря! – Dando18

+2

неправильный ответ - ActionListener предназначен для использования JButton, и логика должна заключаться в том, чтобы добавить DocumentListener в JTextFields, – mKorbel

2

JButton предполагается начать отключается до тех пор текст не будет введен в обоих JTextFields, а затем JButton включен

Вот пример использования DocumentListener, что является гораздо более гибким, то кодирование, если/else для каждого текстового компонента. Это решение является более общим и работает для любого количества текстовых полей.

import java.awt.*; 
import java.awt.event.*; 
import java.util.List; 
import java.util.ArrayList; 
import javax.swing.*; 
import javax.swing.event.*; 

public class DataEntered implements DocumentListener 
{ 
    private JButton button; 
    private List<JTextField> textFields = new ArrayList<JTextField>(); 

    public DataEntered(JButton button) 
    { 
     this.button = button; 
    } 

    public void addTextField(JTextField textField) 
    { 
     textFields.add(textField); 
     textField.getDocument().addDocumentListener(this); 
    } 

    public boolean isDataEntered() 
    { 
     for (JTextField textField : textFields) 
     { 
      if (textField.getText().trim().length() == 0) 
       return false; 
     } 

     return true; 
    } 

    @Override 
    public void insertUpdate(DocumentEvent e) 
    { 
     checkData(); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent e) 
    { 
     checkData(); 
    } 

    @Override 
    public void changedUpdate(DocumentEvent e) {} 

    private void checkData() 
    { 
     button.setEnabled(isDataEntered()); 
    } 

    private static void createAndShowUI() 
    { 
     JButton submit = new JButton("Submit"); 
     submit.setEnabled(false); 

     JTextField textField1 = new JTextField(10); 
     JTextField textField2 = new JTextField(10); 

     DataEntered de = new DataEntered(submit); 
     de.addTextField(textField1); 
     de.addTextField(textField2); 

     JFrame frame = new JFrame("SSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(textField1, BorderLayout.WEST); 
     frame.add(textField2, BorderLayout.EAST); 
     frame.add(submit, BorderLayout.SOUTH); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
Смежные вопросы