javaFX从fxml加载场景但是从代码中添加标签

时间:2015-06-23 00:27:06

标签: java javafx javafx-2 javafx-8

我有以下fxml,我在另一个场景中按下按钮

<GridPane fx:id="gridPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" styleClass="root" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="VMProvOpenstack.Controller"  >
  <columnConstraints>
    <ColumnConstraints hgrow="SOMETIMES" maxWidth="295.0" minWidth="10.0" prefWidth="162.0" />
    <ColumnConstraints hgrow="SOMETIMES" maxWidth="295.0" minWidth="10.0" prefWidth="162.0" />
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="358.0" minWidth="0.0" prefWidth="358.0" />
      <ColumnConstraints hgrow="SOMETIMES" maxWidth="450.0" minWidth="0.0" prefWidth="0.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints maxHeight="166.0" minHeight="10.0" prefHeight="96.0" vgrow="SOMETIMES" />
    <RowConstraints maxHeight="238.0" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints maxHeight="305.0" minHeight="10.0" prefHeight="257.0" vgrow="SOMETIMES" />
  </rowConstraints>
   <children>
      <Region prefHeight="36.0" prefWidth="538.0" style="-fx-background-color: brown;" GridPane.rowIndex="1">
         <effect>
            <Blend />
         </effect>
      </Region>
      <Region prefHeight="200.0" prefWidth="200.0" style="-fx-background-color: brown;" GridPane.columnIndex="1" GridPane.rowIndex="1" />
      <Region layoutX="10.0" layoutY="112.0" prefHeight="36.0" prefWidth="538.0" style="-fx-background-color: brown;" GridPane.columnIndex="2" GridPane.rowIndex="1">
         <effect>
            <Blend />
         </effect>
      </Region>

       <Label fx:id="loggedinUser" contentDisplay="RIGHT" prefHeight="21.0" prefWidth="199.0" text="Loged in as:  " textFill="green" GridPane.columnIndex="2" GridPane.rowIndex="0" />
       <Label fx:id="ipopenstack"  contentDisplay="RIGHT" prefHeight="21.0" prefWidth="199.0" text="IP : 192.168.131.132" textFill="#eb0f0f" translateX="-40.0" GridPane.columnIndex="2" GridPane.rowIndex="2" />
</children>
</GridPane>

代码是

 @FXM Label ipopenstack=new Label();
 @FXML GridPane gridPane=new GridPane();
....
Stage stageTheEventSourceNodeBelongs = (Stage)((Node)event.getSource()).getScene().getWindow();

 try {
Scene scene= new Scene(FXMLLoader.load(getClass().getResource("my.fxml")),700,500);
stageTheEventSourceNodeBelongs.setScene(scene);
} catch (IOException e) {
                    e.printStackTrace();
}

如果我这样做,一切都显示得很好。 但是我想在这个场景中添加带有动态消息的Label,并且仍然保留fxml中的所有内容。 如果我这样做,其中message是一个字符串

Label ipL=new Label(message);                  
gridPane.add(ipL, 2, 2);
scene.setRoot(gridPane);

在setScene之前,它将添加我的标签,但不添加来自fxml的元素。

有什么建议吗? 感谢

2 个答案:

答案 0 :(得分:0)

首先尝试从场景中获取窗格,然后更新

Parent p=scene.getRoot();
// Navigate to the appropriate pane object
//the try adding the label to the pane object
pane.add(ipL, 2, 2);

并确保所有这些都在JavaFx线程(工作线程)中完成

或者您可以做的另一件事是在需要更新消息时立即添加和隐藏标签,只需使用消息更新Label并关闭其隐藏

答案 1 :(得分:0)

永远不要初始化@FXML Label ipopenstack ; @FXML GridPane gridPane ; - 注入的字段。你应该

@FXML Label ipopenstack=new Label();
@FXML GridPane gridPane=new GridPane();

而不是

$link = 'http://www.example/data/showall.php?quantity=&lang=eng&sura=2&ayat=21';