我有3個swing文本字段和一個swing按鈕。我想要做的是將沒有這三個字段爲空的button.setEnabled()從false更改爲true。我想這並不難,但我找不到辦法。 在一個文本字段的keytyped操作上使用button.setEnabled(true)很容易,但是如何檢查所有這些操作? 感謝您的回覆。Java - 用鍵入動作檢查多個JTextFields
回答
一個簡單的辦法:無論你會把button.setEnabled(true)
放像
button.setEnabled(!tf1.getText().isEmpty() && !tf2.getText().isEmpty() && !tf3.getText().isEmpty());
你不想檢查只是鍵盤輸入,只要你想也佔了複製和粘貼輸入和去除(停用的JButton)。對於字段的所有三個關聯文檔,我都使用一個DocumentListener,如果所有文檔都包含文本,則將該按鈕設置爲啓用。
例如,
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
public class FieldListenerTest {
private static final int FIELD_COUNT = 5;
private static void createAndShowUI() {
JButton button = new JButton("Button");
FieldListener fieldListener = new FieldListener(button);
JPanel mainPanel = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < FIELD_COUNT; i++) {
JTextField field = new JTextField(10);
fieldListener.registerDoc(field.getDocument());
mainPanel.add(field);
}
button.setEnabled(false);
mainPanel.add(button);
JFrame frame = new JFrame("FieldListenerTest");
frame.getContentPane().add(mainPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
class FieldListener implements DocumentListener {
private List<Document> docs = new ArrayList<Document>();
private JButton button;
public FieldListener(JButton button) {
this.button = button;
}
public void registerDoc(Document doc) {
docs.add(doc);
doc.addDocumentListener(this);
}
@Override
public void changedUpdate(DocumentEvent arg0) {
update();
}
@Override
public void insertUpdate(DocumentEvent arg0) {
update();
}
@Override
public void removeUpdate(DocumentEvent arg0) {
update();
}
private void update() {
for (Document doc : docs) {
if (doc.getLength() == 0) {
button.setEnabled(false);
return;
}
}
button.setEnabled(true);
}
}
那必須在EDT上完成,只有Listener可以做到這一點,文檔+1 – mKorbel
謝謝。耦合需要減少。 –
這是我會怎麼做:
創建一個匿名監聽器檢查字段是否空白並相應地設置按鈕狀態(例如):
DocumentListener listener = new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
updateButton();
}
public void insertUpdate(DocumentEvent e) {
updateButton();
}
private void updateButton() {
boolean all_blank = tf1.getText().isEmpty() &&
tf2.getText().isEmpty() &&
tf3.getText().isEmpty();
button.setEnabled(!all_blank);
}
public void removeUpdate(DocumentEvent e) {
updateButton();
}
};
然後將其連接到所有的字段:
tf1.getDocument().addDocumentListener(listener);
tf2.getDocument().addDocumentListener(listener);
tf3.getDocument().addDocumentListener(listener);
注:由於Eng.Fouad提到,KeyListener的不貼火了,所以我把它改成一個的DocumentListener
如果您將一些文本粘貼到文本字段中,這將不起作用 –
- 1. 檢查JTextFields是否爲空
- 2. 多個JTextFields?
- 3. Java JTextfields
- 4. 多個Jtextfields到一個Jbutton
- 5. JOptionPane.ShowInputDialog中的多個JTextFields?
- 6. 使用DocumentListener修改多個JTextFields
- 7. Mysql如何使用重複鍵檢查插入多個表?
- 8. 檢查字典中的多個鍵不起作用。 python
- 9. 動態添加JTextFields後刪除JTextFields
- 10. 在java中檢測多個按鍵
- 11. 如何使多個JTextFields寫入一個文件
- 12. Java:如何檢查是否鍵入第一個字符== x
- 13. 檢索和分析來自多個JTextFields的數據
- 14. 檢查字典是否有多個鍵
- 15. Wordpress get_post_meta - 如何檢查多個鍵?
- 16. jtextfields在一個jtextfields中的總和值
- 17. 在java中關閉一個按鍵的多個動作
- 18. java如何填充多個JTextFields從.txt文件讀取數據
- 19. Java PreparedStatement多個批量插入外鍵
- 20. 檢查外鍵是插入
- 21. C++鍵輸入檢查
- 22. 清除JTextfields寫入多個數據到txt文件
- 23. 檢查兩個鍵輸入的用戶輸入
- 24. 如何使java上的簡單鍵盤在JTextFields中有效輸入?
- 25. 禁用按鈕,如果JTextFields是空的,RadioButtons沒有檢查
- 26. 如何一次檢測多個關鍵動作
- 27. 如何將動作添加到多個JButtons內部具有ActionListener類的JTextfields?
- 28. 按鍵檢查不工作
- 29. 插入多個屬性作爲外鍵
- 30. jQuery多個輸入和檢查長度
這對一個時間點很有用,但是你仍然想把它附加到某個聽衆,對吧? –
對,所有的'DocumentListener',就像你所做的一樣。對不起,我的回答太簡單了。 –