質問があります。SwingGUIフォームを作成しました。このフォームには、JTextFields、JComboBoxコンポーネントが含まれています。
ここで、ユーザーが完了ボタンを押したときに、JTextFieldsおよびJComboBoxコンポーネントを検証したいと思います。すべてのJTextFieldsに共通のメソッドと、JComboBoxesに別の共通のメソッドを記述したいと思います。誰かが検証APIについて知っていますか?
すべてのフィールドを1つずつ検証する必要はありません。
質問があります。SwingGUIフォームを作成しました。このフォームには、JTextFields、JComboBoxコンポーネントが含まれています。
ここで、ユーザーが完了ボタンを押したときに、JTextFieldsおよびJComboBoxコンポーネントを検証したいと思います。すべてのJTextFieldsに共通のメソッドと、JComboBoxesに別の共通のメソッドを記述したいと思います。誰かが検証APIについて知っていますか?
すべてのフィールドを1つずつ検証する必要はありません。
ここでの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);
「検証」が「すべてのフィールドをチェックする」を意味する場合...そうです-「検証」ルーチンはすべてのフィールドを1つずつチェックします:)
「必要に応じて検証」することもできます。これを実現するには、次のような多くの方法があります。
利用可能なサードパーティのAPIがいくつかあります。あなたはあなた自身のために開発することができます
これは、 InputVerifierを使用してSwing検証パッケージを構築するためのサンプルチュートリアルです。
それは可能ではありません。代わりに、JTextFieldを継承する新しいクラスを作成し、またはvalidate()
として関数を作成し、そこから毎回(つまり、必要になる)それを呼び出す必要があります。private
protected
getText()
@Override
別の方法は、各フィールドを個別に使用Container.getComponent()
して確認し、検証することです。instanceof
しかし、これはあなたが求めているものに反します。