【问题标题】:How to Check if all the JTexFields are empty or not?如何检查所有 JTexFields 是否为空?
【发布时间】:2013-05-28 11:24:55
【问题描述】:

我正在使用 for 循环 来创建 9 个 JTextFields,这工作正常。我的问题是,我想一次检查所有这些 JTextField 是否为空。我知道有这样的方法:

if (textbox.getText().trim().equals(""))

检查JTextField是否为空,但我不确定它是否适合我用于JTextField的方法。下面是我的 for 循环:

       for (int index = 1; index <=9; index++)
            {
                JTextField field = new JTextField(3);
                field.setPreferredSize(new Dimension(150, 50));
                field.setHorizontalAlignment(JTextField.CENTER);
                field.setEditable(false);
                second.add(field);
                second.add(Box.createHorizontalStrut(10));
                second.add(Box.createVerticalStrut(10));

            }   

【问题讨论】:

  • 我不明白,什么时候需要检查它们是否为空?
  • 其实我在做一个游戏“刽子手”,所以当用户猜到这个词的时候,所有的JTextfield都会被字母填充,然后它会检查没有JTextfield是否为空,用户的赢得比赛..

标签: java swing jtextfield is-empty


【解决方案1】:

如何实现您自己的 DocumentListener?当所有字段都为空时,您可以有一个布尔值变为真,并且您可以在字段 Document 的每次更改后直接进行各种与刽子手相关的检查。

【讨论】:

    【解决方案2】:

    考虑一下这段代码。

    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    
    public class Test extends JFrame implements ActionListener {
        JTextField tfs[];
        JButton btn;
        public Test(){
            setLayout( new FlowLayout());
            tfs = new JTextField[9];
            for( int i=0; i< tfs.length; i++) {
                tfs[i] = new JTextField(10);
                add(tfs[i]);
            }
            add( btn = new JButton("Check"));
            btn.addActionListener(this);
            setSize(200,300);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        }
        public void actionPerformed (ActionEvent ae){
            boolean pass = true;
            for(int i=0; i<tfs.length; i++)
                if( tfs[i].getText().trim().equals(""))
                    pass = false;
    
            System.out.println(pass?"Passed":"Failed");
        }
        public static void main (String args[]){
            new Test();
        }
    }
    

    【讨论】:

      【解决方案3】:

      将您的文本字段存储在一个列表中,以便您以后可以对其进行迭代。

      public class ClassContainingTextFields {
          private final ArrayList<JTextField> textFields = new ArrayList<>();
      
          // ... inside the method that creates the fields ...
              for (int i = 0; i < 9; i++) {
                  JTextField field = new JTextField(3);
                  //  .. do other setup 
                  textFields.add(field);
              }
      
      
          /**
           * This method returns true if and only if all the text fields are empty
           **/
          public boolean allFieldsEmpty() {
              for (JTextField textbox : textFields) {
                  if (! textbox.getText().trim().isEmpty() ) {
                      return false;   // one field is non-empty, so we can stop immediately
                  }
              }
              return true;  // every field was empty (or else we'd have stopped earlier)
          }
          // ....
      }
      

      【讨论】:

      • 是否可以这样做,比如如果所有 Jtextfield 中都有一些字符,然后停止程序,实际上我正在制作一个刽子手游戏,其中用户在 JTexField 中输入字母。所以,当用户猜到这个词时,所有的 JTexField 都是用字母填充的,而不是我希望我的程序检查,如果每个字段都用字符填充,那么它会说,用户的胜利..!!
      • 你的意思是像textbox.getText().indexOf('n') 来测试文本字段中是否有'n'?当然。您可以对一个领域做的任何事情都可以对所有领域做。
      猜你喜欢
      • 2015-01-11
      • 2014-05-06
      • 1970-01-01
      • 2018-02-22
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多