2014-01-21 63 views
3

我正在尋找在Swing上下文中使用FXML的JavaFX 2的一些幫助。我使用Scene Builder(版本:2.0-b10,Changeset:48fc80a12d33)構建了一個場景,並試圖在Java 1.7中將它加載到Swing中的JFrame上的JFXPanel中。當我這樣做,我得到的第16行的無效的屬性錯誤這是第16行:<Label style="-fx-font-weight: bold;" text="Storage Overview Home" VBox.vgrow="NEVER">JavaFX FXMLLoader無效的屬性

這裏是整個場景:

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.chart.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.paint.*?> 

<AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="600.0" minWidth="800.0" prefHeight="768.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <children> 
     <BorderPane layoutX="54.0" layoutY="45.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
      <left> 
       <VBox fx:id="" prefHeight="726.0" prefWidth="210.0" style="-fx-background-color: #dee8f6;"> 
        <children> 
         <Label style="-fx-font-weight: bold;" text="Storage Overview Home" VBox.vgrow="NEVER"> 
          <padding> 
           <Insets bottom="18.0" left="6.0" top="6.0" /> 
          </padding> 
         </Label> 
         <ComboBox fx:id="ASPCombo" prefWidth="150.0" VBox.vgrow="NEVER" xmlns:fx="http://javafx.com/fxml"> 
          <VBox.margin> 
           <Insets bottom="12.0" left="6.0" /> 
          </VBox.margin> 
         </ComboBox> 
         <Label text="Job Information" VBox.vgrow="NEVER" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
          <padding> 
           <Insets bottom="12.0" left="6.0" /> 
          </padding> 
         </Label> 
         <Hyperlink fx:id="activeJobStatusLink" style="-fx-text-fill: #210B61;" text="Active Job Status" VBox.vgrow="NEVER" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
          <VBox.margin> 
           <Insets left="12.0" /> 
          </VBox.margin> 
         </Hyperlink> 
         <Hyperlink fx:id="jobMonitorThresholdLink" style="-fx-text-fill: #210B61;" text="Job Monitor Threshold History" VBox.vgrow="NEVER" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
          <VBox.margin> 
           <Insets left="12.0" /> 
          </VBox.margin> 
         </Hyperlink> 
         <Hyperlink fx:id="jobQtempThresholdLink" style="-fx-text-fill: #210B61;" text="Job QTEMP Threshold History" VBox.vgrow="NEVER" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
          <VBox.margin> 
           <Insets left="12.0" /> 
          </VBox.margin> 
         </Hyperlink> 
         <Hyperlink fx:id="jobSpooledFileThresholdLink" style="-fx-text-fill: #210B61;" text="Job Spooled File Threshold History" VBox.vgrow="NEVER" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
          <VBox.margin> 
           <Insets left="12.0" /> 
          </VBox.margin> 
         </Hyperlink> 
         <StackPane prefHeight="150.0" prefWidth="200.0" VBox.vgrow="ALWAYS" /> 
         <Label text="See Also"> 
          <padding> 
           <Insets bottom="6.0" left="12.0" /> 
          </padding> 
         </Label> 
         <Hyperlink fx:id="collectionHistoryLink" style="-fx-text-fill: #210B61;" text="Collection History" VBox.vgrow="NEVER" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
          <VBox.margin> 
           <Insets left="12.0" /> 
          </VBox.margin> 
         </Hyperlink> 
         <Hyperlink fx:id="currentStorageLink" style="-fx-text-fill: #210B61;" text="Current Storage" VBox.vgrow="NEVER" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
          <VBox.margin> 
           <Insets bottom="12.0" left="12.0" /> 
          </VBox.margin> 
         </Hyperlink> 
        </children> 
       </VBox> 
      </left> 
      <top> 
       <ToolBar prefWidth="200.0" xmlns:fx="http://javafx.com/fxml"> 
        <items> 
         <Button fx:id="btnRefresh" mnemonicParsing="false" text="Back" /> 
         <HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
          <children> 
           <Pane HBox.hgrow="ALWAYS" /> 
          </children> 
         </HBox> 
         <Button mnemonicParsing="false" text="Refresh" /> 
        </items> 
       </ToolBar> 
      </top> 
      <center> 
       <VBox prefHeight="200.0" prefWidth="100.0" style="-fx-background-color: #FFFFFF;"> 
        <children> 
         <VBox minHeight="-Infinity" prefHeight="136.0" prefWidth="766.0" VBox.vgrow="NEVER"> 
          <children> 
           <Label fx:id="storageOverviewTitle" style="-fx-font-size: 18; -fx-text-fill: #0000FF;" text="Identify and Solve Disk Storage Problems" VBox.vgrow="NEVER"> 
            <textFill> 
             <Color blue="1.0" /> 
            </textFill> 
           </Label> 
           <TextArea fx:id="storageOverviewTextArea" editable="false" prefHeight="100.0" prefWidth="200.0" text="The Storage Overview helps you quickly identify and solve disk storage problems. Most surges in disk use are caused by active jobs. For example, a server communication job can devour a large amount of your unprotected storage space. And, these jobs can be hard to find. Use the ASP Threshold History and Job Temp Storage History buttons to display the ASPs and jobs that have exceeded their thresholds. Use the Active Jobs Status button to find and hold or end the job(s) causing a disk storage problem." wrapText="true" VBox.vgrow="NEVER" /> 
          </children> 
          <VBox.margin> 
           <Insets bottom="24.0" left="24.0" right="24.0" top="24.0" /> 
          </VBox.margin> 
         </VBox> 
         <HBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="177.0" prefWidth="814.0" VBox.vgrow="NEVER"> 
          <children> 
           <PieChart fx:id="totalASPUtilizationPieChart" title="Total ASP Utilization" HBox.hgrow="NEVER" /> 
           <PieChart fx:id="utilizationByLibraryPieChart" title="By Library" HBox.hgrow="NEVER" /> 
           <PieChart fx:id="utilizationByIFSDirPieChart" title="By IFS Directory" HBox.hgrow="NEVER" /> 
          </children> 
         </HBox> 
         <AreaChart fx:id="ASPUtilizationHistoryAreaChart" title="Utilization History - ASP 001" VBox.vgrow="ALWAYS"> 
          <xAxis> 
           <CategoryAxis side="BOTTOM" /> 
          </xAxis> 
          <yAxis> 
           <NumberAxis side="LEFT" /> 
          </yAxis> 
         </AreaChart> 
        </children> 
       </VBox> 
      </center> 
     </BorderPane> 
    </children> 
</AnchorPane> 

我使用嘗試顯示場景圖的代碼是:

Platform.setImplicitExit(false); 
Platform.runLater(new Runnable() { 
    @Override 
    public void run() { 
     Parent root; 
     try { 
      root = FXMLLoader.load(getClass().getResource("MyPanel.fxml")); 
      Scene scene = new Scene(root); 
      swingPanel.setScene(scene); 
     } catch (Exception ex){ 
      //Log an error here... 
     } 
    } 
}); 

我得到的錯誤是:

Invalid property. 
/C:/HelpSys/space/trunk/gui/classes/com/helpsystems/space/gui/csi/MyPanel.fxml:16 
    at javafx.fxml.FXMLLoader$PropertyElement.<init>(FXMLLoader.java:1154) 
    at javafx.fxml.FXMLLoader.createElement(FXMLLoader.java:2338) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2311) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2131) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2744) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2723) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2709) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2696) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2685) 
    at com.helpsystems.space.gui.csi.CSIWizzard$1.run(CSIWizzard.java:182) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179) 
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176) 
    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$3$1.run(WinApplication.java:73) 
    at java.lang.Thread.run(Unknown Source) 

回答

7

padding屬性不是JavaFX 2.2中的Label中的有效屬性。在JavaFX 8中,Label繼承自Region(通過Control),因此繼承padding屬性。所以我懷疑SceneBuilder正在研究JavaFX 8以確定屬性。

在JavaFX 2.2有一個labelPadding屬性,它可以從CSS設置,所以使用

<Label style="-fx-font-weight: bold; -fx-label-padding: 6 0 18 6;" text="Storage Overview Home" 
    VBox.vgrow="NEVER"> 

</Label> 
+0

完美!謝謝@James_D! – RonSiven