Я разрабатываю этот GUI (новичок в программировании), и в основном, когда я щелкаю правой кнопкой мыши «New Component», добавляю «Add Parameter» и нажимаю «High» или «Low», должна появиться панель вкладок с 2 вкладками. Я указал fx: id для Borderpane в построителе сцен, но я думаю, что проблема в том, что первая Borderpane в построителе сцен перекрывает все, и я попытался создать новую рамочную панель в ContextMenuTreeCell.java (как показано ниже). Но я не уверен, как это исправить, и я хочу вызвать его в Controller.java
Любая помощь будет оценена, спасибо.
Main.java
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
public class Main extends Application {
Stage window;
Button button;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
window = primaryStage;
window.setTitle("LOPA Software");
window.setScene(new Scene(root, 800, 500));
window.show();
}
}
Controller.java
package sample;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.util.Callback;
import java.awt.event.MouseEvent;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable {
@FXML
TreeView<String> treeView;
@FXML
TableView tableView1;
@FXML
TableView tableView2;
@FXML
BorderPane borderPane;
@FXML
Button button1;
@FXML
Button button2;
Image icon = new Image(
getClass().getResourceAsStream("/img/icon.png"));
private MouseEvent mouseEvent;
@Override
public void initialize(URL location, ResourceBundle resources) {
TreeItem<String> root = new TreeItem<>("Project", new ImageView(icon));
root.setExpanded(true);
TreeItem<String> compA = new TreeItem<>("New Component", new ImageView(icon));
root.getChildren().addAll(compA);
compA.setExpanded(true);
treeView.setRoot(root);
treeView.setEditable(true);
treeView.setCellFactory(new Callback<TreeView<String>,TreeCell<String>>(){
@Override
public TreeCell<String> call(TreeView<String> p) {
return new ContextMenuTreeCell();
}
});
}
ContextMenuTreeCell.java
package sample;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.control.cell.TextFieldTreeCell;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.util.converter.DefaultStringConverter;
import sun.reflect.generics.tree.Tree;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.Map;
public class ContextMenuTreeCell extends TextFieldTreeCell<String> {
Image icon = new Image(
getClass().getResourceAsStream("/img/icon.png"));
private ContextMenu menu = new ContextMenu();
@FXML
BorderPane borderPane;
static final Map<TreeItem<String>, BorderPane> map = new HashMap<>();
public ContextMenuTreeCell() {
super(new DefaultStringConverter());
MenuItem addItem = new MenuItem("Add Component");
menu.getItems().add(addItem);
addItem.setOnAction(arg0 -> {
TreeItem<String> additem = new TreeItem<>("New Component", new ImageView(icon));
getTreeItem().getChildren().add(additem);
});
MenuItem addItem2 = new MenuItem("Add Parameter");
menu.getItems().add(addItem2);
addItem2.setOnAction(arg0 -> {
TreeItem<String> newLeaf = new TreeItem<>("Parameter", new ImageView(icon));
TreeItem<String> uxItem1 = new TreeItem<>("High", new ImageView(icon));
map.put(uxItem1, getcenterPane());
TreeItem<String> uyItem1 = new TreeItem<>("Low", new ImageView(icon));
map.put(uyItem1, getcenterPane2());
newLeaf.getChildren().add(uxItem1);
newLeaf.getChildren().add(uyItem1);
getTreeItem().getChildren().add(newLeaf);
});
MenuItem renameItem = new MenuItem("Rename");
menu.getItems().add(renameItem);
renameItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
startEdit();
}
});
MenuItem deleteitem = new MenuItem("Delete");
menu.getItems().add(deleteitem);
deleteitem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
TreeItem c = (TreeItem)getTreeView().getSelectionModel().getSelectedItem();
boolean remove = c.getParent().getChildren().remove(c);
}
});
}
public BorderPane getcenterPane() {
BorderPane borderPane = new BorderPane();
Tab tab = new Tab("Test tab");
Tab tab2 = new Tab("Tab 2");
TabPane tabPane = new TabPane(tab, tab2);
borderPane.setCenter(tabPane);
return borderPane;
}
public BorderPane getcenterPane2() {
BorderPane borderPane = new BorderPane();
Tab tab = new Tab("PHA Low");
Tab tab2 = new Tab("LOPA Low ");
TabPane tabPane = new TabPane(tab, tab2);
borderPane.setCenter(tabPane);
return borderPane;
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (!isEditing()) {
setContextMenu(menu);
}
}
}
sample.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<BorderPane fx:id="borderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<top>
<VBox BorderPane.alignment="CENTER">
<children>
<MenuBar>
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Open" />
<MenuItem mnemonicParsing="false" text="Save" />
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Copy" />
<MenuItem mnemonicParsing="false" text="Cut" />
<MenuItem mnemonicParsing="false" text="Paste" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
<ToolBar>
<items>
<Button mnemonicParsing="false" text="Toolbar" />
<Button fx:id="button1" mnemonicParsing="false" text="Add New Row" />
<Button fx:id="button2" mnemonicParsing="false" text="Delete Row" />
</items>
</ToolBar>
</children>
</VBox>
</top>
<left>
<TreeView fx:id="treeView" editable="true" onMouseClicked="#mouseClick" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
</left>
<bottom>
<HBox BorderPane.alignment="CENTER">
<children>
<Label text="Label" />
</children>
</HBox>
</bottom>
</BorderPane>