質問

ユーザーが「クリアボタン」をクリックしたときに、 JPanel のすべての JTextfField を初期化するには、 JPanel をループする必要があります。 >(すべての個々のフィールドを""に設定する代わりに)。

JTextField を検索して JPanel を反復処理するためにfor-eachループを使用するにはどうすればよいですか?

役に立ちましたか?

解決

for (Component c : pane.getComponents()) {
    if (c instanceof JTextField) { 
       ((JTextField)c).setText("");
    }
}

しかし、より深くネストされたJTextFieldがある場合は、次の再帰形式を使用できます。

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 を介してパックを実行する必要があります。キャスト(ジェネリックを想定)は、何かが間違っていることを確認する簡単な方法です。

したがって、フォームのテキストフィールドを作成するとき、それらをクリア操作でクリアするリストに追加し、パネルに追加します。もちろん、実際のコードには、おそらく他にもやりたいことがあります。実際のコードでは、おそらく JComponent sではなく、モデル(おそらく Document )を扱いたいでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top