JavaFx:再次在TreeView中添加TreeItem
JavaFx:再次在TreeView中添加TreeItem,javafx,Javafx,TreeView必须添加TreeItems。这是我的密码: 导入javafx.application.application; 导入javafx.beans.value.ChangeListener; 导入javafx.beans.value.observeValue; 导入javafx.event.ActionEvent; 导入javafx.event.EventHandler; 导入javafx.geometry.Insets; 导入javafx.geometry.Pos; 导入javafx
TreeView
必须添加TreeItem
s。这是我的密码:
导入javafx.application.application;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.geometry.Insets;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.ContextMenu;
导入javafx.scene.control.Label;
导入javafx.scene.control.MenuItem;
导入javafx.scene.control.TextField;
导入javafx.scene.control.TreeCell;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeView;
导入javafx.scene.control.cell.TextFieldTreeCell;
导入javafx.scene.input.KeyEvent;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.VBox;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Rectangle;
导入javafx.stage.stage;
导入javafx.util.Callback;
公共类主扩展应用程序
{
私人边界;
@抑制警告(“未选中”)
@凌驾
公共无效开始(阶段primaryStage)
{
border=新边框窗格();
场景=新场景(边框,600300);
primaryStage.setTitle(“边框窗格”);
初级阶段。场景(场景);
primaryStage.show();
TreeItem tree=新的TreeItem(“主系统”);
TreeItem2=新的TreeItem(“根”);
TreeItem2Child1=新的TreeItem(“UX”);
TreeItem2Child2=新的TreeItem(“UY”);
item2.getChildren().addAll(item2Child1,item2Child2);
项目2.设置扩展(真);
tree.setExpanded(true);
tree.getChildren().add(item2);
树视图树视图=新树视图(树);
setCellFactory(新回调(){
@凌驾
公共TreeCell呼叫(TreeView p){
返回新的AddMenuTreeCell();
}
});
VBox box3=新的VBox();
treeView.getSelectionModel().SelectEditeProperty().addListener(新的ChangeListener()){
@凌驾
public void changed(ObservalEvalue我稍微更改了代码。问题是您多次尝试将节点添加到场景中。在本例中,我创建了一个与树视图及其关联的边框窗格保持一致的贴图
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Label;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.control.cell.TextFieldTreeCell;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Callback;
/**
*
* @author blj0011
*/
public class JavaFXApplication124 extends Application
{
//List<BorderPane> rightPanels = new ArrayList();
static final Map<TreeItem<String>, BorderPane> MAP = new HashMap();
static BorderPane root;
@Override
public void start(Stage primaryStage)
{
TreeItem<String> treeRoot = new TreeItem("Main System");
root = new BorderPane();
TreeView treeView = new TreeView(treeRoot);
treeView.setOnMouseClicked((event)->{
TreeItem tempTreeItem = (TreeItem)treeView.getSelectionModel().getSelectedItem();
if(tempTreeItem.getValue().equals("Main System"))
{
root.setCenter(getRootsPanel());
//System.out.println(getRootsPanel());
}
else
{
root.setCenter(MAP.get(tempTreeItem));
System.out.println(MAP.get(tempTreeItem));
}
});
treeView.setCellFactory(new Callback<TreeView<String>,TreeCell<String>>(){
@Override
public TreeCell<String> call(TreeView<String> p) {
return new AddMenuTreeCell();
}
});
treeRoot.setExpanded(true);
root.setLeft(treeView);
TreeItem<String> uxItem1 = new TreeItem("UX");
MAP.put(uxItem1, getrightPane1());
TreeItem<String> uyItem1 = new TreeItem("UY");
MAP.put(uyItem1, getrightPane1());
treeRoot.getChildren().addAll(uxItem1, uyItem1);
Scene scene = new Scene(root, 500, 500);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
TreeItem<String> addNewTreeItem(String name)
{
TreeItem tempTreeItem = new TreeItem(name);
return tempTreeItem;
}
private static class AddMenuTreeCell extends TextFieldTreeCell<String> {
private final ContextMenu menu = new ContextMenu();
private TextField textField;
public AddMenuTreeCell() {
MenuItem newitem1 = new MenuItem("Insert leaf");
menu.getItems().add(newitem1);
newitem1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
TreeItem<String> newLeaf = new TreeItem("UY");
getTreeItem().getChildren().add(newLeaf);
MAP.put(newLeaf, getrightPane1());
}
});
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (isEditing()) {
if (textField != null) {
textField.setText(item);
}
setText(null);
setGraphic(textField);
} else {
setText(item);
setGraphic(getTreeItem().getGraphic());
if (!(getTreeItem().isLeaf() && getTreeItem().getParent() == null)){
setContextMenu(menu);
}
}
}
}
}
private static BorderPane getrightPane1() {
TextField textf1 = new TextField();
TextField textf2 = new TextField();
BorderPane root1 = new BorderPane();
VBox vbox = new VBox(20);
vbox.setPadding(new Insets(10));
HBox h1 = new HBox(7);
HBox h2 = new HBox(7);
textf1.setPrefWidth(100);
textf1.setPromptText("Enter Height");
textf1.setOnKeyReleased(new EventHandler<KeyEvent>(){
@Override
public void handle(KeyEvent event)
{
if(textf1.getText().length() > 0 && textf2.getText().length() > 0)
{
Rectangle rect = new Rectangle();
rect.setHeight(Double.parseDouble(textf1.getText()));
rect.setWidth(Double.parseDouble(textf2.getText()));
rect.setFill(null);
rect.setStroke(Color.RED);
root1.setBottom(rect);
}
}
});
textf2.setPrefWidth(100);
textf2.setPromptText("Enter Width");
textf2.setOnKeyReleased(new EventHandler<KeyEvent>(){
@Override
public void handle(KeyEvent event)
{
if(textf1.getText().length() > 0 && textf2.getText().length() > 0)
{
Rectangle rect = new Rectangle();
rect.setHeight(Double.parseDouble(textf1.getText()));
rect.setWidth(Double.parseDouble(textf2.getText()));
rect.setFill(null);
rect.setStroke(Color.RED);
root1.setBottom(rect);
}
}
});
if(textf1.getText().length() > 0 && textf2.getText().length() > 0 && root1.getBottom() == null)
{
Rectangle rect = new Rectangle();
rect.setHeight(Double.parseDouble(textf1.getText()));
rect.setWidth(Double.parseDouble(textf2.getText()));
rect.setFill(null);
rect.setStroke(Color.RED);
root1.setBottom(rect);
}
h1.getChildren().addAll(new Label("Y1:"), textf1);
h2.getChildren().addAll(new Label("X1:"), textf2);
vbox.getChildren().addAll(h1, h2);
root1.setLeft(vbox);
return root1;
}
private static BorderPane getRootsPanel() {
BorderPane root1 = new BorderPane();
HBox hbox = new HBox();
List<BorderPane> listBordePane = new ArrayList(MAP.values());
for(BorderPane element : listBordePane)
{
Node node = element.getBottom();
if(node instanceof Rectangle)
{
Rectangle tempRectangle = ((Rectangle)node);
Rectangle newRectangle = new Rectangle();
newRectangle.setWidth(tempRectangle.getWidth());
newRectangle.setHeight(tempRectangle.getHeight());
newRectangle.setFill(tempRectangle.getFill());
newRectangle.setStroke(tempRectangle.getStroke());
hbox.getChildren().add(newRectangle);
}
}
root1.setLeft(hbox);
return root1;
}
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入javafx.application.application;
导入javafx.application.Platform;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.geometry.Insets;
导入javafx.scene.Node;
导入javafx.scene.scene;
导入javafx.scene.control.ContextMenu;
导入javafx.scene.control.Label;
导入javafx.scene.control.MenuItem;
导入javafx.scene.control.TextField;
导入javafx.scene.control.TreeCell;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeView;
导入javafx.scene.control.cell.TextFieldTreeCell;
导入javafx.scene.input.KeyEvent;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.VBox;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Rectangle;
导入javafx.stage.stage;
导入javafx.util.Callback;
/**
*
*@author blj0011
*/
公共类JavaFXApplication124扩展了应用程序
{
//List rightPanels=新建ArrayList();
静态最终映射=新HashMap();
静态边界根;
@凌驾
公共无效开始(阶段primaryStage)
{
TreeItem treeRoot=新的TreeItem(“主系统”);
root=新边框窗格();
TreeView TreeView=新的TreeView(treeRoot);
treeView.setOnMouseClicked((事件)->{
TreeItem TestreeItem=(TreeItem)treeView.getSelectionModel().getSelectedItem();
if(testreeItem.getValue().equals(“主系统”))
{
setCenter(getRootsPanel());
//System.out.println(getRootsPanel());
}
其他的
{
setCenter(MAP.get(testreeitem));
System.out.println(MAP.get(testreeitem));
}
});
setCellFactory(新回调(){
@凌驾
公共TreeCell呼叫(TreeView p){
返回新的AddMenuTreeCell();
}
});
treeRoot.setExpanded(true);
根。设置左(treeView);
TreeItem uxItem1=新的TreeItem(“UX”);
put(uxItem1,getrightPane1());
TreeItem uyItem1=新TreeItem(“UY”);
put(uyItem1,getrightPane1());
treeRoot.getChildren().addAll(uxItem1,uyItem1);
场景=新场景(根,500500);
setTitle(“你好,世界!”);
初级阶段。场景(场景);
primaryStage.show();
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args)
{
发射(args);
}
TreeItem addNewTreeItem(字符串名称)
{
TreeItem-tentreeitem=新的TreeItem(名称);
退货项目;
}
私有静态类AddMenuTreeCell扩展了TextFieldTreeCell{
私有最终上下文菜单=新建上下文菜单();
私有文本字段文本字段;
公共AddMenuTreeCell(){
MenuItem newitem1=新MenuItem(“插入叶”);
menu.getItems().add(newitem1);
newitem1.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent arg0){
TreeItem newLeaf=新TreeItem(“UY”);
getTreeItem().getChildren().add(newLeaf);
put(newLeaf,getrightPane1());
}
});
}
@凌驾
公共无效更新