值集不会显示在 Medusa Gauge 中
The value set doesn't get displayed in the Medusa Gauge
我尝试将 Medusa Gauge 添加到我使用 FXML 的 JavaFX 项目中。
我在场景构建器中正确映射了 fx:id
并设置了一个要显示的值。
但不幸的是,该值未显示,仅显示默认值 0.00
。
这是我的代码
Class 包含主要方法 - 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 制作项目,我也做了同样的事情。
谁能告诉我哪里出错了,我设置的值没有显示出来?
您正在用 initialize
方法中的新值覆盖包含在 fxml 中创建的 Gauge
的字段值。新的永远不会添加到场景中;你只看到旧的未修改的。
如果 Gauge
的工作方式与 JavaFX 标准 Control
s 的工作方式相同,您只需要使用 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" />
我尝试将 Medusa Gauge 添加到我使用 FXML 的 JavaFX 项目中。
我在场景构建器中正确映射了 fx:id
并设置了一个要显示的值。
但不幸的是,该值未显示,仅显示默认值 0.00
。
这是我的代码
Class 包含主要方法 - 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 制作项目,我也做了同样的事情。
谁能告诉我哪里出错了,我设置的值没有显示出来?
您正在用 initialize
方法中的新值覆盖包含在 fxml 中创建的 Gauge
的字段值。新的永远不会添加到场景中;你只看到旧的未修改的。
如果 Gauge
的工作方式与 JavaFX 标准 Control
s 的工作方式相同,您只需要使用 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" />