私は大きな複雑なGUIのスケルトンを作成しようとしています。そのため、javafx 2.1でmvcのようなスタイルですべてを作成するため、すべてのコンポーネントにfxmlファイルがあり、必要に応じてcss、controller、modelがあります。私はサブシーン(実行時にサブfxml)を変更する方法を理解しようとしています。誰かがそれを行う方法を知っていますか?ちょっとこだわっています。 MainViewControllerを追加しますか?シナリオ:ユーザーがタスクバーのボタンをクリックすると、含まれているcontent1.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
}
}
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"));
}
それは機能しますが、ヘルプはthxですが、TaskBar.fxmlとTaskBarController.Javaを強制的に削除し、@ FXMLハンドルと@FXMLを使用してMainViewControllerを作成し、ボタンとペインに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")));
}