Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I would consider using a DocumentListener that listens to the Documents held by the JTextFields. There are examples of this sort of thing on this site (I know, because I've written one or two).</p> <p>For example,</p> <pre><code>import java.awt.Component; import java.util.ArrayList; import java.util.List; import javax.swing.*; import javax.swing.event.*; import javax.swing.text.JTextComponent; public class DocumentListenerFun extends JPanel { private static final int FIELD_COUNT = 5; private JTextField[] fields = new JTextField[FIELD_COUNT]; private JButton fooBtn = new JButton("Foo"); private JButton barBtn = new JButton("Bar"); private MyFieldListener myFieldListener = new MyFieldListener(); public DocumentListenerFun() { fooBtn.setEnabled(false); barBtn.setEnabled(false); for (int i = 0; i &lt; fields.length; i++) { fields[i] = new JTextField(10); add(fields[i]); myFieldListener.addTextComponent(fields[i]); } myFieldListener.addComponentsToEnable(fooBtn); myFieldListener.addComponentsToEnable(barBtn); add(fooBtn); add(barBtn); } private static void createAndShowGui() { DocumentListenerFun mainPanel = new DocumentListenerFun(); JFrame frame = new JFrame("DocumentListenerFun"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(mainPanel); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } } class MyFieldListener { private List&lt;JTextComponent&gt; textComponents = new ArrayList&lt;JTextComponent&gt;(); private List&lt;Component&gt; componentsToEnable = new ArrayList&lt;Component&gt;(); private MyDocListener myDocListener = new MyDocListener(this); public void addTextComponent(JTextComponent textComponent) { textComponents.add(textComponent); textComponent.getDocument().addDocumentListener(myDocListener); } public void addComponentsToEnable(Component comp) { componentsToEnable.add(comp); } public void docsChanged() { boolean textVerified = true; for (JTextComponent textComp : textComponents) { String text = textComp.getText(); textVerified &amp;= verifyText(text); } for (Component comp : componentsToEnable) { comp.setEnabled(textVerified); } } private boolean verifyText(String text) { try { int value = Integer.parseInt(text.trim()); if (value &gt; 0) { return true; } } catch (NumberFormatException e) { return false; } return false; } } class MyDocListener implements DocumentListener { private MyFieldListener myFieldListener; public MyDocListener(MyFieldListener myFieldListener) { this.myFieldListener = myFieldListener; } @Override public void changedUpdate(DocumentEvent e) { myFieldListener.docsChanged(); } @Override public void insertUpdate(DocumentEvent e) { myFieldListener.docsChanged(); } @Override public void removeUpdate(DocumentEvent e) { myFieldListener.docsChanged(); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload