Внешний вид компонент JavaFX настраивается в CSS. Соответственно, должен быть какой-то конвертер стандартного javafx.scene.paint.Color в CSS-friendly формат.
Возможно, он и правда есть - но я его не нашёл. К тому же, внутри класс Color устроен немного по-другому: насыщенность цвета в свойствах getRed, getBlue и getGreen задаётся double-числом от 0.0 до 1.0.
И вот что получилось:
На выходе из COLOR.Red получается правильный #FF0000.
Выглядит симпатично и немного напоминает чистый C :).Правда, прозрачность потерялась.
А если заглянуть в стандарт CSS, то выясняется: уже давно можно задавать цвет как rgba(0, 0, 255, 1.0).
А значит, наш код можно переписать вот так (formatter нужен, чтобы вместо точки в десятичной дроби не завелась запятая):
Возможно, он и правда есть - но я его не нашёл. К тому же, внутри класс Color устроен немного по-другому: насыщенность цвета в свойствах getRed, getBlue и getGreen задаётся double-числом от 0.0 до 1.0.
И вот что получилось:
public static String colorToJson(Color color){
return String.format("#%02X%02X%02X",
(int)(color.getRed() * 0xFF),
(int)(color.getBlue() * 0xFF),
(int)(color.getGreen() * 0xFF));
}
На выходе из COLOR.Red получается правильный #FF0000.
Выглядит симпатично и немного напоминает чистый C :).Правда, прозрачность потерялась.
А если заглянуть в стандарт CSS, то выясняется: уже давно можно задавать цвет как rgba(0, 0, 255, 1.0).
А значит, наш код можно переписать вот так (formatter нужен, чтобы вместо точки в десятичной дроби не завелась запятая):
public static String colorToJson(Color color){
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb, Locale.US);
formatter.format("rgba(%.0f, %.0f, %.0f, %.1f)", color.getRed() * 0xFF, color.getBlue() * 0xFF, color.getGreen() * 0xFF, color.getOpacity());
return sb.toString();
}
Комментариев нет:
Отправить комментарий