Cómo actualizar un TreeView en JavaFX con datos de usuarios
Estoy rogando con JavaFx, y me di cuenta de que necesito ayuda para actualizar un TreeView con algunos TreeItems en tiempo de ejecución, y debería actualizarse en la ventana principal.
Aquí puede ver una captura de pantalla de las dos ventanas:
La más grande es la ventana principal y llama (haciendo clic en Archivo >> Nuevo proyecto), nueva más pequeña. En la ventana más pequeña, podría obtener la cadena que se escribe y luego se hace clic en el botón Intro.
El problema es: ¿Cómo puedo mostrar los nuevos elementos creados por la "nueva ventana del proyecto" (la ventana más pequeña en la imagen) en TreeView en la ventana principal (la más grande)? La vista de árbol está en el lado izquierdo de la ventana principal.
Espero haber sido claro. Aquí está el código de los controladores de estas ventanas:
package application;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeItem.TreeModificationEvent;
import javafx.scene.control.TreeView;
import javafx.stage.Modality;
import javafx.stage.Stage;
/**
* this class handles with the main window of our LDF Tool
* @author Vinicius
* @version 1.0
*/
public class MainController implements Initializable{
@FXML
TreeView<String> treeView;
@FXML
MenuItem newProject;
private boolean flag = false;
private NewProjectWindowController npwc;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
@FXML
public void newProjectClicked(ActionEvent event){
try{
flag = true;
FXMLLoader fxml = new FXMLLoader(getClass().getResource("newProjectWindow.fxml"));
Parent root = (Parent) fxml.load();
Stage newWindow = new Stage();
newWindow.setTitle("New Project");
newWindow.initModality(Modality.APPLICATION_MODAL);
newWindow.setScene(new Scene(root));
newWindow.show();
} catch (Exception e) {
System.out.println("caiu na exceção");
}
}
/**
* to this method, choose the project's name as argument, and it will be put on the
* tree with the archives that should be created together
* @param projectName
*/
public void doTree(String projectName){
TreeItem<String> root = new TreeItem<>("projectName");
root.setExpanded(true);
//TreeItem<String> folha1 = new TreeItem<String>(projectName + " arquivo 1");
//root.getChildren().add(folha1);
treeView.setRoot(root);
}
La otra clase de controlador:
package application;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class NewProjectWindowController implements Initializable{
@Override
public void initialize(URL location, ResourceBundle resources) {
}
@FXML
Button cancelButton;
@FXML
Button enterButton;
@FXML
TextField textInput;
private String input;
public String getInput(){
return this.input;
}
@FXML
public void cancelButtonClicked(ActionEvent event) {
Stage window = (Stage) this.cancelButton.getParent().getScene().getWindow();
window.close();
}
@FXML
public void enterButtonClicked(ActionEvent event) {
input = hasString();
Stage window = (Stage) this.enterButton.getParent().getScene().getWindow();
window.close();
}
private String hasString(){
if (this.textInput.getText().isEmpty())
return null;
return this.textInput.getText();
}
}
Por favor, suponga que mapeé todo bien en el archivo FXML. Gracias