tutorial español botones javafx-2 fxml

javafx-2 - español - botones en javafx



Cómo cambiar las partes de subfxml gui en tiempo de ejecución con un clic de botón (2)

No solo incluya fxml, cree una capa de lógica empresarial para eso:

<BorderPane xmlns:fx="http://javafx.com/fxml"> <center> <Pane fx:id="content"/> </center>

y actualizarlo en los controladores de clic de botón:

@FXML private void handleTaskBarButton2Action(ActionEvent event) { System.out.println("click! taskBarButton2"); content.getChildren().clear(); content.getChildren().add(FXMLLoader.load(getClass().getResource("Content2.fxml")); }

Estoy tratando de construir un esqueleto para una gran interfaz gráfica de usuario, por lo que la idea es hacer todo con estilo mvc en javafx 2.1, así que cada componente tiene un archivo fxml y, si es necesario, css, controlador y modelo. Estoy intentando descubrir cómo cambiar las sub escenas (sub fxml en tiempo de ejecución). ¿Alguien sabe como hacerlo? Estoy un poco atascado en esto. ¿Puede ser que se agregue MainViewController? escenario: el usuario hace clic en el botón en la barra de tareas y el contenido incluido1.fxml se reemplazará con el contenido2.fxml

aquí el código básico

MainApp.java

Loads the MainView.fxml

MainView.fxml

<?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <BorderPane xmlns:fx="http://javafx.com/fxml"> <center> <fx:include source="Content1.fxml"/> </center> <bottom> <fx:include source="TaskBar.fxml"/> </bottom> </BorderPane>

Content1.fxml

<?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <StackPane xmlns:fx="http://javafx.com/fxml" fx:id="content1"> <Label text="Hallo Java FX 2.1.1 Content1.fxml"/> </StackPane>

Content2.fxml

<?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <StackPane xmlns:fx="http://javafx.com/fxml" fx:id="content2"> <Label text="Hallo Java FX 2.1.1 Content2.fxml"/> </StackPane>

TaskBar.fxml

<?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <HBox xmlns:fx="http://javafx.com/fxml" spacing="10" alignment="center" fx:id="taskBar" fx:controller="TaskBarController"> <children> <Button fx:id="taskBarButton1" onAction="#handleTaskBarButton1Action"/> <Button fx:id="taskBarButton2" onAction="#handleTaskBarButton2Action"/> </children> </HBox>

TaskBarController.java

import java.net.URL; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; public class TaskBarController implements Initializable { // Binding with the FXML @FXML private Button taskBarButton1; @FXML private Button taskBarButton2; @FXML private void handleTaskBarButton1Action(ActionEvent event) { System.out.println("click! taskBarButton1"); } @FXML private void handleTaskBarButton2Action(ActionEvent event) { System.out.println("click! taskBarButton2"); } @Override public void initialize(URL location, ResourceBundle resources) { // TODO Auto-generated method stub } }


funciona, gracias por la ayuda, pero me vi obligado a eliminar TaskBar.fxml y TaskBarController.java, escribí un MainViewController con los manejadores de @FXML y @FXML para los botones y el panel con el fx: id = "contenido", y puse mi Botones de aduanas en MainView.fxml

@FXML private void handleTaskBarButton2Action(ActionEvent event) throws IOException { System.out.println("click! taskBarButton2"); content.getChildren().clear(); content.getChildren().add((Node) FXMLLoader.load(getClass().getResource("Content2.fxml"))); }