2017-05-25 4 views
0

Topicenumクラスであることを覚えておいて、同様の構造を持つ複数のMenuItemを作成しました。同様の構造を持つ `MenuItem`を作成してください。

構造は次のようになります。

CheckBox business = new CheckBox("Business"); 
    // add Topic to filteredTopics set when box is selcted 
    business.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      if(((CheckBox)event.getSource()).isSelected()) { 
       filteredTopics.add(Topic.BUSINESS); 
      } else { 
       filteredTopics.remove(Topic.BUSINESS); 
      } 
     } 
    }); 

    CheckBox international = new CheckBox("International"); 
    // add Topic to filteredTopics set when box is selcted 
    international.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      if(((CheckBox)event.getSource()).isSelected()) { 
       filteredTopics.add(Topic.INTERNATIONAL); 
      } else { 
       filteredTopics.remove(Topic.INTERNATIONAL); 
      } 
     } 
    }); 

    //etc like Sport, Domestic... 

は、これらのMenuItem Sをコーディングするくらいのコンパクトな方法があり、私はトピックをハードコーディングするのですか?要件はとしています。トピックコントロールは、ハードコードされていない状態でプログラムする必要があります(つまり、プログラムはトピックの列挙型からすべてのコントロールの番号と名前を決定する必要があります)。

さらに詳しい説明が必要な場合はお知らせください。

答えて

0

列挙型のトピックごとに1つの配列にチェックボックスを作成します。

このようなものです。

List<CheckBox> checkboxes = new ArrayList<CheckBox>(); 
for(Topic t : Topic.values()) { 
    Checkbox c = new Checkbox(t.toString()); 
    c.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      if((CheckBox)event.getSource()).isSelected()) { 
       filteredTopics.add(t); 
      } 
      else { 
      filteredTopics.remove(t); 
      } 
     } 
    }); 
    checkboxes.add(c); 
} 

また、それが後でアクセスするために簡単ですが、あなたはこれでそれを把握するための値の順序を使用することができるようにあなたが話題を保存することができ、チェックボックスのための小さな拡張クラスを作成しても意味がありますセットアップ。

関連する問題