ユーザーが「クリア ボタン」をクリックJTextfField
したときにすべてのを初期化するには、 (すべての個々のフィールドを「」に設定する代わりに) をループする必要があります。JPanel
JPanel
JPanel
sを検索して反復するために、for-each ループを使用するにはどうすればよいJTextField
ですか?
ユーザーが「クリア ボタン」をクリックJTextfField
したときにすべてのを初期化するには、 (すべての個々のフィールドを「」に設定する代わりに) をループする必要があります。JPanel
JPanel
JPanel
sを検索して反復するために、for-each ループを使用するにはどうすればよいJTextField
ですか?
for (Component c : pane.getComponents()) {
if (c instanceof JTextField) {
((JTextField)c).setText("");
}
}
しかし、JTextFields がより深くネストされている場合は、次の再帰形式を使用できます。
void clearTextFields(Container container) {
for (Component c : container.getComponents()) {
if (c instanceof JTextField) {
((JTextField)c).setText("");
} else
if (c instanceof Container) {
clearTextFields((Container)c);
}
}
}
編集: Tom Hawtinのサンプル- タックラインの提案は、フレーム クラスにリストを含めることです。
List<JTextField> fieldsToClear = new LinkedList<JTextField>();
個々のテキスト フィールドを初期化するときに、それらを次のリストに追加します。
someField = new JTextField("Edit me");
{ fieldsToClear.add(someField); }
ユーザーがクリアボタンをクリックすると、次のようになります。
for (JTextField tf : fieldsToClear) {
tf.setText("");
}
別の回答はあなたの問題を解決する直接的な方法を示していますが、あなたの質問は解決策が不十分であることを暗示しています。
通常、レイヤー間の静的な依存関係は一方向にする必要があります。パックを通過する必要がありますgetCommponents
。キャスト (ジェネリックを想定) は、何かが間違っていることを確認する簡単な方法です。
そのため、フォームのテキスト フィールドを作成するときは、それらをパネルに追加するだけでなく、クリア操作でクリアするリストに追加します。もちろん、実際のコードでは、おそらく他にもやりたいことがあります。Document
実際のコードでは、sではなくモデル (おそらく ) を扱いたいと思うでしょうJComponent
。