2015-09-07 109 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

實際上,他需要將它添加到* both * textfields中。 –

+0

@GergelyBacso哎呀,這就是我想說的,但我猜我的手指輸入了別的東西。我做了編輯。謝謝! – Dando18

+2

錯誤的答案 - ActionListener被指定用於JButton,並且邏輯應該將DocumentListener添加到兩個JTextFields, – mKorbel

2

將JButton應該開始禁用,直到文本被輸入到這兩個JTextField中,然後將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(); 
      } 
     }); 
    } 
}