2015-11-06 1 views
0

Так у меня есть BorderPane в моем FXML, что я хочу сделать, это перезагрузить свои свойства BorderPane.Center так он показывает другую панель с другим макетом,Как отредактировать fxml из кода?

Как я могу добиться этого? Коды ниже не работают для меня.

p.s: извините за индонезийский.

Мой FXML:

<BorderPane fx:id="bPane" xmlns:fx="http://javafx.com/fxml" fx:controller="fx.HomeMhsController" stylesheets="@css.css">  
<left> 
    <VBox spacing="10" fx:id="vbox" id="vbox" prefWidth="100" > 
     <Label id="Label" fx:id="biodata" text="Biodata" onMouseClicked="#showIdentity"/> 
     <Label id="Label" fx:id="histori" text="Histori Nilai" onMouseClicked="#showHistory" /> 
     <Label id="Label" fx:id="jadwal" text="Jadwal Kuliah" onMouseClicked="#showSchedule" /> 
     <Label id="Label" fx:id="pilih" text="Pilih Mata Kuliah" onMouseClicked="#chooseSchedule"/> 
    </VBox> 
</left> 

Мой контроллер:

public class HomeMhsController{ 
@FXML private Label biodata2; 
@FXML private BorderPane bPane; 

@FXML private void showIdentity() throws SQLException{ 
    init.initializeDB(); 

    String query="select * from mahasiswa where nama_dpn ='" + MainController.username + "'"; 
    ResultSet rset = init.stmt.executeQuery(query); 

    if(rset.next()){ 
      String nim = rset.getString(1); 
      String nama_dpn = rset.getString(2); 
      String nama_blkg = rset.getString(3); 
      String tgl_lahir = rset.getString(4); 
      String tempat_lahir = rset.getString(5); 
      String jns_kelamin = rset.getString(6); 
      String agama = rset.getString(7); 
      String alamat = rset.getString(8); 
      String no_hp = rset.getString(9); 
      biodata2.setText(nim + nama_dpn + nama_blkg + tgl_lahir + tempat_lahir + jns_kelamin + agama + alamat + no_hp); 
    } 
} 
@FXML private void showHistory() throws IOException{ 
    FXMLLoader loader = new FXMLLoader(); 
    Parent rootNode = null; 
    rootNode = loader.load(getClass().getResource("homeMhs_fxml.fxml")); 
    Label dua = new Label("2"); 
    Pane pane = new Pane(); 
    pane.getChildren().add(dua); 
    ((BorderPane) rootNode).setCenter(pane); 
} 
@FXML private void showSchedule() throws SQLException, IOException{ 
    FXMLLoader loader = new FXMLLoader(); 
    Parent rootNode = null; 
    rootNode = loader.load(getClass().getResource("homeMhs_fxml.fxml")); 
    Label tiga = new Label("3"); 
    Pane pane = new Pane(); 
    pane.getChildren().add(tiga); 
    ((BorderPane) rootNode).setCenter(pane); 
} 
@FXML private void chooseSchedule() throws SQLException{ 

} 

ответ

0

В следующем фрагменте кода:

@FXML private void showHistory() throws IOException{ 
    FXMLLoader loader = new FXMLLoader(); 
    Parent rootNode = null; 
    rootNode = loader.load(getClass().getResource("homeMhs_fxml.fxml")); 
    Label dua = new Label("2"); 
    Pane pane = new Pane(); 
    pane.getChildren().add(dua); 
    ((BorderPane) rootNode).setCenter(pane); 
} 

вы снова загружать файл FXML, который новый ce и отличается от той, которую вы уже имеете (так как этот метод в классе контроллера). Более того, вы ничего не делаете с этим недавно загруженным (т. Е. rootNode не добавляется ни в какую сцену).

Вместо просто использовать существующие впрыскивается границы панели:

@FXML private void showHistory() { 
    Label dua = new Label("2"); 
    Pane pane = new Pane(); 
    pane.getChildren().add(dua); 
    bPane.setCenter(pane); 
} 

или более короче:

@FXML private void showHistory() { 
    bPane.setCenter(new Pane(new Label("2"))); 
} 
+0

я вижу, ТНХ для этого, она работает !! – Jason