Внешний вид компонент 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(); }
Комментариев нет:
Отправить комментарий