设定的值不会显示在Medusa Gauge中

时间:2017-05-16 03:47:43

标签: javafx javafx-8 gauge

我尝试将Medusa Gauge添加到使用FXML的JavaFX项目中。 我在场景构建器中正确映射了fx:id并设置了要显示的值。

但遗憾的是,该值未显示,仅显示默认的0.00

这是我的代码

包含main方法的类 - GaugeFX.java

public class GaugeFX extends Application {

    @Override
    public void start(Stage stage) {
        try {
            Parent root = FXMLLoader.load(getClass().getResource("Demo.fxml"));

            Scene scene = new Scene(root);

            stage.setScene(scene);
            stage.show();
        } catch (IOException ex) {
            Logger.getLogger(GaugeFX.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

FXML - Demo.fxml

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

<?import eu.hansolo.medusa.Gauge?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.102" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gaugeDemoFX.DemoController">
   <children>
      <Gauge fx:id="gaugeExample" alert="true" alertMessage="Almost full" animated="true" areaTextVisible="true" layoutX="123.0" layoutY="113.0" lcdFont="ELEKTRA" skinType="SLIM" />
   </children>
</AnchorPane>

FXML控制器 - DemoController.java

public class DemoController implements Initializable {

    @FXML
    Gauge gaugeExample;

    @Override
    public void initialize(URL url, ResourceBundle rb) {

        GaugeBuilder builder = GaugeBuilder.create();
        gaugeExample = builder.decimals(0).maxValue(10000).unit("Questions").build();
        gaugeExample.setValue(45);
    }    
}

我试着查看文档。那里的例子是在硬编码中完成的。我注意到在展示舞台之前已经设置了Gauge的值。

  

https://community.oracle.com/docs/DOC-992746

但据我所知,即使我使用FXML来制作项目,我也做了同样的事情。

有人可以告诉我哪里出错了我设置的值没有显示出来吗?

1 个答案:

答案 0 :(得分:1)

您在Gauge方法中覆盖了包含fxml中创建的initialize的字段的值,并使用了新值。新的一个永远不会添加到场景中;你只看到旧的未经修改的。

如果Gauge的工作方式与JavaFX标准Control的工作方式相同,则只需使用setter而不是使用构建器:

@Override
public void initialize(URL url, ResourceBundle rb) {
    gaugeExample.setDecimals(0);
    gaugeExample.setMaxValue(10000);
    gaugeExample.setUnit("Questions");
    gaugeExample.setValue(45);
}

此外,还应该可以从fxml文件中分配属性:

<Gauge fx:id="gaugeExample"
       alert="true"
       alertMessage="Almost full"
       animated="true"
       areaTextVisible="true"
       layoutX="123.0"
       layoutY="113.0"
       lcdFont="ELEKTRA"
       skinType="SLIM"
       decimals="0"
       maxValue="10000"
       unit="Questions"
       value="45" />