2016-12-09 14 views
2

私はJavaとスイングで小さなアプリケーションを開発しています。私はゼロからその一部を行うことができる問題に直面しています。スウィングのすべてのチェックボックスを繰り返します。

パネルの1つには、約20個のチェックボックスがあります。今のところ、変数名はjcheckbox1、jcheckbox2などです。私はすべてを繰り返し、選択したもののテキストを取得する必要があります。この問題はNetBeansを使用して必要な要素をドラッグアンドドロップしてGUIを開発したため、チェックボックスをリストや配列に集約していないという問題があります。このことを考えれば、すべてのチェックボックスを選択し、それらを繰り返して、チェックされたチェックボックスのテキスト値を取得する可能性はありますか?

もしそうでない場合は、それらを簡単に反復できるように宣言する必要がありますか?私は、チェックボックスの配列はそれだけではあまり難しくないかもしれないと信じていますが、問題はすべて正しい位置に置くことから来ているようです。私は2つの列を持つグリッドバッグを使用しています。

ありがとうございます!

+1

'NetBeansを使用して、必要な要素をドラッグ&ドロップすることでGUIを開発しました。 ' - d IDEを使用してフォームを作成しないでください。あなたが見ることができるように、この質問の問題であり、別のIDEに移動する必要がある場合、コードは移植できません。代わりに自分でフォームをコーディングし、適切なレイアウトマネージャを使用して希望のレイアウトを取得します。コードの保守と使用が簡単になります。たとえば、[GridLayoutの使い方](http://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html)のデモコードから始めます。 – camickr

答えて

3

を、あなたは彼らがJCheckBoxあるかどうかを確認、その後、すべての子コンポーネントを見つけることができる、とそれらがチェックされている場合。

次の例の方法は、How to get all elements inside a JFrame?からインスピレーションを得た、とあなたのニーズに適合している:

public static List<String> manageCheckedCheckboxes(final Container c) { 
    Component[] comps = c.getComponents(); 
    List<String> checkedTexts = new ArrayList<String>(); 

    for (Component comp : comps) { 

     if (comp instanceof JCheckBox) { 
      JCheckBox box = (JCheckBox) comp; 
      if (box.isSelected()) { 

       String text = box.getText(); 
       checkedTexts.add(text); 
      } 
     } 
    } 

    return checkedTexts; 

} 
+0

これはうまくいった。ありがとうございました:D –

+0

Java 8を使用している場合、@flakesによる回答も正しいことに注意してください。 – Berger

0

Netbeansはドラッグのコードを生成します。&ドロップコンポーネントを使用すると、リストやその他のコレクションに手動で追加してから反復処理を行うことができます。

+0

?より具体的な何かを加える –

1

コンテナ内のコンポーネントを繰り返し処理し、チェックボックスにキャストできるかどうかを確認できます。私はあなたが必要とする可能性のある部品を見つけるための一般的な再帰バージョン作ら楽しみのために

List<JCheckBox> checkboxes = Arrays.stream(container.getComponents()) 
    .filter(c -> c instanceof JCheckBox) 
    .map(JCheckBox.class::cast) 
    .collect(Collectors.toList()); 

List<String> selectedText = checkboxes.stream() 
    .filter(JCheckBox::isSelected) 
    .collect(Collectors.toList()); 

Container考える
public static <T extends JComponent> List<T> findComponents(
    final Container container, 
    final Class<T> componentType 
) { 
    return Stream.concat(
     Arrays.stream(container.getComponents()) 
      .filter(componentType::isInstance) 
      .map(componentType::cast), 
     Arrays.stream(container.getComponents()) 
      .filter(Container.class::isInstance) 
      .map(Container.class::cast) 
      .flatMap(c -> findComponents(c, componentType).stream()) 
    ).collect(Collectors.toList()); 
} 
0

Netbeansのはまだあなたがしなければならないすべては作成し、ソースに行くで、フォームデザインでカスタムコードを記述することができますチェックボックスの配列

他の変数を見つけることができますページの一番下に、配列を作成します:として Create an array

初期化配列:

Initialize array as

を後で、単純に配列

を反復処理することができます
for(JCkeckBox cb: ckeckBoxes){ 
    // 
} 
関連する問題