Javafx 单击按钮选择树节点
我想开发一个简单的示例,在这个示例中,我可以使用按钮选择TreeView节点(在某些情况下,单击图像等)。我创建了这个简单的示例:Javafx 单击按钮选择树节点,javafx,javafx-2,javafx-8,Javafx,Javafx 2,Javafx 8,我想开发一个简单的示例,在这个示例中,我可以使用按钮选择TreeView节点(在某些情况下,单击图像等)。我创建了这个简单的示例: package click.treenodeclicktest; import javafx.application.Application; import static javafx.application.Application.launch; import javafx.geometry.Insets; import javafx.scene.Scene;
package click.treenodeclicktest;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class MainApp extends Application
{
@Override
public void start(Stage stage) throws Exception
{
HBox hb = new HBox(initTree(), initPanel());
Scene scene = new Scene(hb, 800, 800);
stage.setTitle("JavaFX and Maven");
stage.setScene(scene);
stage.show();
}
public TreeView<String> initTree()
{
TreeItem<String> treeItemRoot = new TreeItem<>("Root");
TreeItem<String> nodeItemA = new TreeItem<>("Item A");
TreeItem<String> nodeItemB = new TreeItem<>("Item B");
TreeItem<String> nodeItemC = new TreeItem<>("Item C");
treeItemRoot.getChildren().addAll(nodeItemA, nodeItemB, nodeItemC);
TreeItem<String> nodeItemA1 = new TreeItem<>("Item A1");
TreeItem<String> nodeItemA2 = new TreeItem<>("Item A2");
TreeItem<String> nodeItemA3 = new TreeItem<>("Item A3");
nodeItemA.getChildren().addAll(nodeItemA1, nodeItemA2, nodeItemA3);
TreeView<String> treeView = new TreeView<>(treeItemRoot);
return treeView;
}
public HBox initPanel()
{
Button bt1 = new Button("Item A1");
Button bt2 = new Button("Item A2");
Button bt3 = new Button("Item A3");
HBox hb = new HBox(bt1, bt2, bt3);
hb.setPadding(new Insets(80, 80, 80, 80));
return hb;
}
public static void main(String[] args)
{
launch(args);
}
}
package click.treenodeclicktest;
导入javafx.application.application;
导入静态javafx.application.application.launch;
导入javafx.geometry.Insets;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeView;
导入javafx.scene.layout.HBox;
导入javafx.stage.stage;
公共类MainApp扩展应用程序
{
@凌驾
public void start(Stage)引发异常
{
HBox hb=新的HBox(initTree(),initPanel());
场景=新场景(hb,800800);
stage.setTitle(“JavaFX和Maven”);
舞台场景;
stage.show();
}
公共树视图initTree()
{
TreeItem treeItemRoot=新的TreeItem(“根”);
TreeItem nodeItemA=新TreeItem(“项目A”);
TreeItem nodeItemB=新的TreeItem(“B项”);
TreeItem nodeItemC=新的TreeItem(“C项”);
treeItemRoot.getChildren().addAll(nodeItemA、nodeItemB、nodeItemC);
TreeItem nodeItemA1=新的TreeItem(“项目A1”);
TreeItem nodeItemA2=新的TreeItem(“项目A2”);
TreeItem nodeItemA3=新的TreeItem(“A3项”);
nodeItemA.getChildren().addAll(nodeItemA1、nodeItemA2、nodeItemA3);
TreeView TreeView=新的TreeView(treeItemRoot);
返回树视图;
}
公共HBox initPanel()
{
按钮bt1=新按钮(“A1项”);
按钮bt2=新按钮(“项目A2”);
按钮bt3=新按钮(“A3项”);
HBox hb=新的HBox(bt1、bt2、bt3);
hb.setPadding(新插图(80,80,80,80));
返回hb;
}
公共静态void main(字符串[]args)
{
发射(args);
}
}
问题是当我点击一个按钮时如何选择树节点。例如,当我单击按钮
项目A1
时,我想选择tree idem项目A1
您的按钮需要对treeView的引用和对要选择的对象的引用。因此,你必须设法让他们可以使用它。然后你可以打电话:
bt1.setOnAction( new EventHandler<ActionEvent>()
{
@Override
public void handle( final ActionEvent event )
{
treeView.getSelectionModel().select( nodeItemA1 );
}
} );
bt1.setOnAction(新的EventHandler()
{
@凌驾
公共无效句柄(最终操作事件)
{
treeView.getSelectionModel().select(nodeItemA1);
}
} );
-编辑-
我接受了您的代码并对其进行了修改,以满足您的请求,但请记住,在您的类中将所有数据对象定义为私有成员可能并不可取。这只是为了说明如何选择节点:
public class MainApp extends Application
{
private TreeView<String> treeView;
private TreeItem<String> treeItemRoot;
private TreeItem<String> nodeItemA;
private TreeItem<String> nodeItemB;
private TreeItem<String> nodeItemC;
private TreeItem<String> nodeItemA1;
private TreeItem<String> nodeItemA2;
private TreeItem<String> nodeItemA3;
@Override
public void start( final Stage stage ) throws Exception
{
HBox hb = new HBox( initTree(), initPanel() );
Scene scene = new Scene( hb, 800, 800 );
stage.setTitle( "JavaFX and Maven" );
stage.setScene( scene );
stage.show();
}
public TreeView<String> initTree()
{
treeItemRoot = new TreeItem<>( "Root" );
nodeItemA = new TreeItem<>( "Item A" );
nodeItemB = new TreeItem<>( "Item B" );
nodeItemC = new TreeItem<>( "Item C" );
treeItemRoot.getChildren().addAll( nodeItemA, nodeItemB, nodeItemC );
nodeItemA1 = new TreeItem<>( "Item A1" );
nodeItemA2 = new TreeItem<>( "Item A2" );
nodeItemA3 = new TreeItem<>( "Item A3" );
nodeItemA.getChildren().addAll( nodeItemA1, nodeItemA2, nodeItemA3 );
treeView = new TreeView<>( treeItemRoot );
return treeView;
}
public HBox initPanel()
{
Button bt1 = new Button( "Item A1" );
bt1.setOnAction( new EventHandler<ActionEvent>()
{
@Override
public void handle( final ActionEvent event )
{
treeView.getSelectionModel().select( nodeItemA1 );
}
} );
Button bt2 = new Button( "Item A2" );
bt2.setOnAction( new EventHandler<ActionEvent>()
{
@Override
public void handle( final ActionEvent event )
{
treeView.getSelectionModel().select( nodeItemA2 );
}
} );
Button bt3 = new Button( "Item A3" );
bt3.setOnAction( new EventHandler<ActionEvent>()
{
@Override
public void handle( final ActionEvent event )
{
treeView.getSelectionModel().select( nodeItemA3 );
}
} );
HBox hb = new HBox( bt1, bt2, bt3 );
hb.setPadding( new Insets( 80, 80, 80, 80 ) );
return hb;
}
public static void main( final String[] args )
{
launch( args );
}
}
public类MainApp扩展应用程序
{
私人树景树景;
私有treeitemtreeitemroot;
私有树节点图;
私有TreeItem nodeItemB;
私有树节点;
私有树节点1;
私有树节点数m2;
私有树节点3;
@凌驾
public void start(final Stage)引发异常
{
HBox hb=新的HBox(initTree(),initPanel());
场景=新场景(hb,800800);
stage.setTitle(“JavaFX和Maven”);
舞台场景;
stage.show();
}
公共树视图initTree()
{
treeItemRoot=新的TreeItem(“根”);
nodeItemA=新树项(“A项”);
nodeItemB=新树项(“B项”);
nodeItemC=新树项(“C项”);
treeItemRoot.getChildren().addAll(nodeItemA、nodeItemB、nodeItemC);
nodeItemA1=新树项目(“项目A1”);
nodeItemA2=新树项目(“项目A2”);
nodeItemA3=新树项目(“项目A3”);
nodeItemA.getChildren().addAll(nodeItemA1、nodeItemA2、nodeItemA3);
treeView=新的treeView(treeItemRoot);
返回树视图;
}
公共HBox initPanel()
{
按钮bt1=新按钮(“A1项”);
bt1.setOnAction(新的EventHandler()
{
@凌驾
公共无效句柄(最终操作事件)
{
treeView.getSelectionModel().select(nodeItemA1);
}
} );
按钮bt2=新按钮(“项目A2”);
bt2.setOnAction(新的EventHandler()
{
@凌驾
公共无效句柄(最终操作事件)
{
treeView.getSelectionModel().select(nodeItemA2);
}
} );
按钮bt3=新按钮(“A3项”);
bt3.setOnAction(新的EventHandler()
{
@凌驾
公共无效句柄(最终操作事件)
{
treeView.getSelectionModel().select(nodeItemA3);
}
} );
HBox hb=新的HBox(bt1、bt2、bt3);
hb.setPadding(新插图(80,80,80,80));
返回hb;
}
公共静态void main(最终字符串[]args)
{
发射(args);
}
}
使用您的代码更新了答案,创建了一个工作示例。我可以尝试从列表中选择对象。有没有办法把树上的项目列为一个列表?我建议为它创建一个新的问题。在那里,你可以更详细地解释你试图实现的目标。