我尝试将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
的值。
但据我所知,即使我使用FXML来制作项目,我也做了同样的事情。
有人可以告诉我哪里出错了我设置的值没有显示出来吗?
答案 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" />