フォームを呼び出すデータベース駆動型ツリーメニューを作成する方法を誰かが提案できますか?
ツリーメニューを作成しましたが、ハードコーディングされています(動的ではありません)。また、フォームを呼び出すために、メニュー項目ごとにいくつかのクリックイベントを導入する必要があります。しかし、私はこれをどのように行うのかわかりません。
だから私の質問は、ツリーメニューを動的に作成するにはどうすればよいですか?クリックイベントを処理して任意のフォーム(これも動的)を呼び出すためのテクニックは何ですか?
まず第一に、あなたが言ったようにハードコードされたツリーのいくつかの部分が必要です。データベースにクエリを実行し、必要なデータを取得し、このデータを使用して必要なもの (チェックボックス、ツリー項目など) を作成し、ツリーに追加できます。すべてに異なる名前を付けることを心配する必要はありません。リスナーが正しいことを確認してください。
動的ツリーを作成するコードを見つけてください。これで、テキストボックスからデータを取得してツリーに追加しています。
HorizontalPanel hpanl = new HorizontalPanel();
tree.addSelectionHandler( new SelectionHandler<TreeItem>() {
@Override
public void onSelection( SelectionEvent<TreeItem> event ) {
tbox.setText( getChildToParentRoot( event ) );
System.out.println("Height::"+event.getSelectedItem().getOffsetHeight()+"Weight::"+event.getSelectedItem().getOffsetWidth());
System.out.println( "Selected::" + event.getSelectedItem().getParentItem() );
Window.alert( "Selected Item:" + event.getSelectedItem().getParentItem().getText() );
}
private String getChildToParentRoot( SelectionEvent<TreeItem> event ) {
TreeItem child = event.getSelectedItem();
String st = null;
while ( child.getParentItem() != null ) {
st = st + child.getText();
child = child.getParentItem();
}
st = st + child.getText();
return st;
}
} );
hpanl.setBorderWidth( 1 );
hpanl.setSpacing( 5 );
hpanl.add( option );
Button subtbtn = new Button( "Add" );
subtbtn.addClickHandler( new ClickHandler() {
@Override
public void onClick( ClickEvent event ) {
String option1 = option.getText();
System.out.println( "TextBox Value::" + option1 );
if ( tree.getSelectedItem() == null ) {
tree.addItem( new TreeItem( option1 ) );
}
else {
TreeItem current = tree.getSelectedItem();
current.setSelected( false );
current.addItem( new TreeItem( option1 ) );
}
}
} );
Button delete = new Button( "Delete" );
delete.addClickHandler( new ClickHandler() {
@Override
public void onClick( ClickEvent event ) {
tree.getSelectedItem().remove();
}
} );
hpanl.add( subtbtn );
hpanl.add( delete );
VerticalPanel vpanel = new VerticalPanel();
vpanel.add( tree );
hpanl.add( tbox );
hpanl.add( vpanel );
RootPanel.get().add( hpanl );