インターネットで検索しましたが、この非常に有用なトピックについて議論している投稿は 1 つもありませんでした。これが私の問題です。
TreeItem のルートと子に CheckBoxes を持つ Tree を取得しました。
ユーザーが TreeItem のルート CheckBox をチェックすると、すべての子 CheckBox とサブルート checkBox がチェックされます。
たとえば、この写真を見てください。
ユーザーが「レベル 1」の CheckBox を選択すると、「レベル 11」と「レベル 111」と「レベル 112」のチェックボックスがチェックされます。ユーザーが「レベル 1」チェックボックスの選択を解除すると、「レベル 11」と「レベル 111」と「レベル 112」のチェックボックスがオフになります。
ユーザーが「メイン」をチェックすると、そのすべての子 (「レベル 1」、「レベル 11」、「レベル 111」および「レベル 112」、「レベル 2」、「レベル 21」) がチェックされます。ユーザーが「メイン」のチェックを外すと、すべての子のチェックが外されます。
ただし、ユーザーが「レベル 2」をチェックすると、「レベル 21」のみがチェックされました。
注: 高度なツリーの深さは不明です。
これはデータコードです:
Tree myTree=new Tree();
TreeItem item1=new TreeItem(new CheckBox("Main"));
myTree.addItem(item1);
TreeItem item2=new TreeItem(new CheckBox("Level 1"));
item1.addItem(item2);
TreeItem item3=new TreeItem(new CheckBox("Level 11"));
item2.addItem(item3);
item3.addItem(new CheckBox("Level 111"));
item3.addItem(new CheckBox("Level 112"));
TreeItem item6=new TreeItem(new CheckBox("Level 2"));
item6.addItem(new CheckBox("Level 21"));
item1.addItem(item6);
これは私が調査したコードですが、1 レベルしか進みません
Iterator<Widget> widgetsOfTree=myTree.iterator();
TreeItem myTreeItem=myTree.getItem(0);
for (int c=0; c<myTreeItem.getChildCount(); c++){
TreeItem childTreeItem=myTreeItem.getChild(c);
CheckBox myCheckBox=(CheckBox)childTreeItem.getWidget();
}
これは、Mayank Pandya によって提供された traverseTree メソッドに基づいた追加のコードです。このコードは、「メイン」または「レベル 1」または「レベル 2」のチェックボックスをクリックすると機能しますが、他のチェックボックスをクリックすると正しく機能しませんでした。たとえば、「レベル 11」をクリックすると、何も選択されませんでした。
myCheckBox.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
for(int i=0; i<myTree.getItemCount(); i++){
TreeItem myTreeItem = myTree.getItem(i);
for (int c=0; c<myTreeItem.getChildCount(); c++){
TreeItem categoryTreeItem=myTreeItem.getChild(c);
CheckBox subCB=(CheckBox)categoryTreeItem.getWidget();
if(myCheckBox==subCB){
traverseTree(categoryTreeItem, myCheckBox.isChecked()) ;
}
}
}
}
});
多くの人がこの質問を探していると思います。私の質問が他の多くの人に役立つことを願っています.