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")));
}