Color.VALUE для текста в JavaFX 8 - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь создать выпадающий список / поле со списком, который содержит несколько цветов, таких как Color.RED, Color.BLUE и т. Д. Но когда я запускаю программу, она печатает цвета в их шестнадцатеричной форме: 0xff0000 , На самом деле, он печатает их в некоторой гексоподобной форме, которая содержит 8 чисел вместо 6: 0xff0000ff. Я знаю, что это как-то связано с ObervableList. Вот где я добавляю цвета, и именно поэтому поле со списком получает цвета. Но как мне заставить его просто напечатать «Красный» или «Синий»?

Text diffuseColorText = new Text("Diffuse Color");
diffuseColorText.setFont(Font.font("Arial", FontWeight.BOLD, 10));
ObservableList<Color> colorList = FXCollections.observableArrayList(Color.RED, Color.BLUE, Color.YELLOW,
    Color.GREEN, Color.PURPLE, Color.ORANGE);
ComboBox<Color> dColors = new ComboBox<>(colorList);
dColors.setPromptText("Color of Box");
dColors.setPrefSize(150, 30);
dColors.setOnAction(event -> {
    diffuseColor = ((ComboBox<Color>) event.getSource()).getValue();
    mymaterial.setDiffuseColor(diffuseColor);
});

1 Ответ

0 голосов
/ 26 июня 2018

Color.toString печатает каналы (включая альфа), и вы ничего не можете с этим поделать.

Вы можете использовать Map<String, Color> для отображения строк в цвет:

Map<String, Color> colors = new LinkedHashMap<>();
colors.put("RED", Color.RED);
...
colors.put("ORANGE", Color.ORANGE);

ObservableList<String> colorList = FXCollections.observableArrayList(colors.keySet());
ComboBox<String> dColors = new ComboBox<>(colorList);
dColors.setPromptText("Color of Box");
dColors.setPrefSize(150, 30);
dColors.setOnAction(event -> {
    diffuseColor = colors.get(((ComboBox<String>) event.getSource()).getValue());
    mymaterial.setDiffuseColor(diffuseColor);
});

Если отражение доступно и вы хотите перечислить всех цветов, доступных через поля в классе Color, вы также можете использовать его для Color s:

private static final int PUBLIC_STATIC = Modifier.PUBLIC | Modifier.STATIC;

...

Map<String, Color> colors = new LinkedHashMap<>();
for (Field field : Color.class.getDeclaredFields()) {
    if (field.getType() == Color.class && (field.getModifiers() & PUBLIC_STATIC) == PUBLIC_STATIC ) {
        colors.put(field.getName(), (Color) field.get(null));
    }
}
...