9

質問があります。SwingGUIフォームを作成しました。このフォームには、JTextFields、JComboBoxコンポーネントが含まれています。

ここで、ユーザーが完了ボタンを押したときに、JTextFieldsおよびJComboBoxコンポーネントを検証したいと思います。すべてのJTextFieldsに共通のメソッドと、JComboBoxesに別の共通のメソッドを記述したいと思います。誰かが検証APIについて知っていますか?

すべてのフィールドを1つずつ検証する必要はありません。

4

4 に答える 4

8

ここでの1つのオプションは、Swingを使用して、使用さInputVerifierれたすべての入力を検証することJComboBoxですJTextField。コンポーネント間で共通のベリファイアを共有できます。

   public class MyNumericVerifier extends InputVerifier {
        @Override
        public boolean verify(JComponent input) {
           String text = null;

           if (input instanceof JTextField) {
             text = ((JTextField) input).getText();
           } else if (input instanceof JComboBox) {
             text = ((JComboBox) input).getSelectedItem().toString();
           }

           try {
              Integer.parseInt(text);
           } catch (NumberFormatException e) {
              return false;
           }

           return true;
        }

        @Override
        public boolean shouldYieldFocus(JComponent input) {
           boolean valid = verify(input);
           if (!valid) {
              JOptionPane.showMessageDialog(null, "Invalid data");
           }

           return valid;
       }
    }

InputVerifier verifier = new MyNumericVerifier()
comboBox.setInputVerifier(verifier);
于 2012-11-24T17:54:27.510 に答える
6

「検証」が「すべてのフィールドをチェックする」を意味する場合...そうです-「検証」ルーチンはすべてのフィールドを1つずつチェックします:)

「必要に応じて検証」することもできます。これを実現するには、次のような多くの方法があります。

于 2012-11-24T17:44:23.593 に答える
2

利用可能なサードパーティのAPIがいくつかあります。あなたはあなた自身のために開発することができます

  1. 必須フィールド、
  2. メール検証、
  3. 最大および最小の長さなど、

これは、 InputVerifierを使用してSwing検証パッケージを構築するためのサンプルチュートリアルです。

于 2012-11-24T17:46:21.750 に答える
1

それは可能ではありません。代わりに、JTextFieldを継承する新しいクラスを作成し、またはvalidate()として関数を作成し、そこから毎回(つまり、必要になる)それを呼び出す必要があります。privateprotectedgetText()@Override

別の方法は、各フィールドを個別に使用Container.getComponent()して確認し、検証することです。instanceofしかし、これはあなたが求めているものに反します。

于 2012-11-24T17:42:49.617 に答える