Установленное значение не отображается на шкале Medusa Gauge.

Я попытался добавить Medusa Gauge в свой проект JavaFX, использующий FXML. Я правильно сопоставил fx:id в конструкторе сцен и установил отображаемое значение.

Но, к сожалению, значение не отображается, и отображается только значение по умолчанию 0.00.

Вот мой код

Класс, содержащий основной метод — 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 — Демо.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 для создания проекта.

Может кто-нибудь, пожалуйста, скажите мне, где я ошибся, что значение, которое я установил, не отображается?


person Dilini Peiris    schedule 16.05.2017    source источник


Ответы (1)


Вы перезаписываете значение поля, содержащего Gauge, созданное в fxml, новым в методе initialize. Новый никогда не добавляется на сцену; вы видите только старый неизмененный.

Если Gauge работает так же, как работают стандартные Controls JavaFX, вам нужно использовать только сеттеры вместо использования построителя:

@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" />

person fabian    schedule 16.05.2017
comment
мне было трудно понять, что делать, потому что в документе, на который я ссылался, были примеры, сделанные в жестком кодировании.. спасибо за помощь - person Dilini Peiris; 16.05.2017