在验证JTextFields的数值是否大于0后,在java中启用JButtons? [英] Enable JButtons in java after JTextFields have been validated for numeric values greater than 0?

查看:109
本文介绍了在验证JTextFields的数值是否大于0后,在java中启用JButtons?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

只有当所有字段中都存在有效数据时才会启用两个按钮,即数字值而不是负数。你怎么做?

There are two buttons which are enabled only when valid data is present in all fields, that is, numeric values and no negative numbers.. How do you do that?

推荐答案

我会考虑使用一个DocumentListener来监听JTextFields持有的Documents。在这个网站上有这类事情的例子(我知道,因为我写了一两个)。

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).

例如,

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 < 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<JTextComponent> textComponents = new ArrayList<JTextComponent>();
   private List<Component> componentsToEnable = new ArrayList<Component>();
   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 &= verifyText(text);
      }

      for (Component comp : componentsToEnable) {
         comp.setEnabled(textVerified);
      }

   }

   private boolean verifyText(String text) {
      try {
         int value = Integer.parseInt(text.trim());
         if (value > 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();
   }

}

这篇关于在验证JTextFields的数值是否大于0后,在java中启用JButtons?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆