1

同じ FXML ファイルで定義されたコード (タグ) を含める方法があるかどうかを知りたいです。私が望むのは、すべてのプロパティをコピーして貼り付けることなく、同じ画像を数回含めることです:

<HBox>
  <Label translateY="25" alignment="center"  text="">
    <graphic>
      <ImageView fitWidth="100" preserveRatio="true" smooth="true">
        <image>
          <Image url="arrow_right.png"/>
        </image>
      </ImageView>
    </graphic>
  </Label>
</HBox>

私は次のようなものが欲しいです:

<fx:define>
  <Label fx:id="myLabel" translateY="25" alignment="center"  text="">
    <graphic>
      <ImageView fitWidth="100" preserveRatio="true" smooth="true">
        <image>
          <Image url="arrow_right.png"/>
        </image>
      </ImageView>
    </graphic>
  </Label>
</fx:define>

<HBox>
    <fx:include source="$myLabel" />
</HBox>

この回答https://stackoverflow.com/a/8490764/1606953を読みましたが、外部ソース (= 他のファイル) を含めることをカバーしています。小さなコードを含めることにもっと興味があります

皆さん、ありがとうございました

4

2 に答える 2

1

<fx:include> は間違いなくこれを処理する最良の方法です。「myLabel」は単一の親ノードしか持てないため、ここで <fx:define> を使用することはできません。ラベルをインクルードに配置することで、コンテンツの複数のインスタンスを作成でき、それぞれが独自の親を持つことができます。

于 2012-08-21T14:42:42.520 に答える
0

私は(ほぼ)探していたものを見つけました:

my-tab.fxml :

<HBox>
  <fx:define>
    <Label fx:id="arrow" alignment="center"  text="" maxWidth="Infinity" VBox.vgrow="ALWAYS" HBox.hgrow="ALWAYS">
     <graphic>
        <ImageView fitWidth="100" preserveRatio="true" smooth="true">
           <image>
             <Image url="peet/resources/images/arrow_right.png"/>
           </image>
        </ImageView>
     </graphic>
    </Label>
  </fx:define>
  <children>
    <Button wrapText="true" text="AAA" maxHeight="Infinity" maxWidth="Infinity"  VBox.vgrow="ALWAYS" HBox.hgrow="ALWAYS" /> 
    <fx:reference source="arrow" />                              
    <Button text="BBB" wrapText="true" minHeight="150" minWidth="100" maxWidth="Infinity" VBox.vgrow="ALWAYS" HBox.hgrow="ALWAYS" /> 
    <fx:reference source="arrow" />
    <Button text="CCC" wrapText="true" minHeight="150" minWidth="100" maxWidth="Infinity" VBox.vgrow="ALWAYS" HBox.hgrow="ALWAYS" /> 
    <fx:reference source="arrow" />
    <Button  text="DDD" wrapText="true" minHeight="150" minWidth="100" maxWidth="Infinity" VBox.vgrow="ALWAYS" HBox.hgrow="ALWAYS" /> 
  </children>       
</HBox> 

これは、参照を 1 つだけ作成した場合にのみ機能します。ここのように 3 つの参照を作成すると、次の例外が発生します。

Children: duplicate children added: parent = HBox@2df02fde
file:/C:/.../my-tab.fxml:48
file:/C:/.../Xxx.jar!/xxx/client/MainTabs.fxml:16
  at javafx.scene.Parent$1.onProposedChange(Parent.java:307)
  at com.sun.javafx.collections.VetoableObservableList.add(VetoableObservableList.java:165)
  at com.sun.javafx.collections.ObservableListWrapper.add(ObservableListWrapper.java:144)
  at javafx.fxml.FXMLLoader$Element.add(FXMLLoader.java:130)
  at javafx.fxml.FXMLLoader$PropertyElement.add(FXMLLoader.java:1179)
  at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:609)
  at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2430)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2136)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
  at javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:937)
  at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:567)
  at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2314)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2131)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2742)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2721)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2707)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2694)
  at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2683)
  at xxx.client.XXX.start(XXX.java:21)
  at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
  at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:206)
  at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:173)
  at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
  at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
  at com.sun.glass.ui.win.WinApplication$2$1.run(WinApplication.java:67)
  at java.lang.Thread.run(Thread.java:722)  

オプションはありますか?

于 2012-08-24T12:53:02.160 に答える