2012-07-19 6 views
17

Próbuję zbudować szkielet dla dużego kompleksu GUI, więc chodzi o to, aby zrobić wszystko z mvc jak styl w javafx 2.1, więc każdy komponent ma fxml plik iw razie potrzeby css, kontroler i model. Próbuję dowiedzieć się, jak zmienić sceny podrzędne (sub fxml w czasie wykonywania). Czy ktoś wie, jak to zrobić? Trochę utknąłem na tym. Czy można dodać MainViewController? scenariusz: użytkownik kliknie przycisk na pasku zadań, a zawarte content1.fxml zostaną zastąpione content2.fxmlJak zmienić części pod-fxml w czasie pracy za pomocą przycisku Kliknij przycisk

tutaj kod podstawowy

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> 

TaskBarCont roller.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 

} 

} 
+0

hier Obrazek dla mojego pożądanego Funktion http://www.alsphera.com/enter/howtodoit.png – Snow

Odpowiedz

17

Nie tylko to fxml utworzyć warstwę logiki biznesowej dla że:

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

i aktualizować je w przycisk kliknij teleskopowe:

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

miałem to sugerować. Możesz nawet iterować nad swoimi dziećmi i zastąpić jeden przy użyciu jego id, jeśli to jest przypadek –

+3

to schould działa dobrze, jeśli wszystko zostało wprowadzone do MainViewController, ale chcę zachować modułowość, jak mogę uzyskać z TaskBarController który jest dołączony do TaskBar.fxml dostęp do węzła macierzystego? byłaby BorderPane z MainView.fxml i wtedy mógłbym dołączyć załadowany content2.fxml do środka boarderpane – Snow

2

to działa , thx o pomoc, ale musiałem usunąć TaskBar.fxml i TaskBarController.java, napisałem MainViewController z uchwytami @FXML i @FXML dla przycisków i okienko z fx: id = "content", i wstawiłem moi Przyciski celne 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"))); 
} 
Powiązane problemy