Подтвердить что ты не робот

Как изменить элементы sub fxml gui во время выполнения с помощью кнопки Click

Я пытаюсь построить скелет для большого сложного gui, поэтому идея состоит в том, чтобы сделать все с mvc как стиль в javafx 2.1, поэтому каждый компонент имеет файл fxml и, если необходимо, css, контроллер и модель. Я пытаюсь выяснить, как изменить подэлементы (sub fxml во время выполнения). Кто-нибудь знает, как это сделать? Я немного застрял на этом. Может ли пчела добавить MainViewController? сценарий: пользователь нажимает кнопку на панели задач, а включенный контент1.fxml будет заменен на content2.fxml

здесь базовый код

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

}

}
4b9b3361

Ответ 1

Не включайте только fxml, создайте для этого уровень бизнес-логики:

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

и обновите его в обработчиках кнопок:

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

Ответ 2

он работает, спасибо для справки, но я был вынужден удалить TaskBar.fxml и TaskBarController.java, написал MainViewController с обработчиками @FXML и @FXML для кнопок и панели с файлом fx: id = "content" и поместите мои обычаи в 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")));
}