Переполнение фона кнопки JavaFX на 1 пиксель вправо - PullRequest
0 голосов
/ 28 апреля 2018

Когда я устанавливаю новый Background на Button, Background имеет на 1 пиксель больше вправо с непрозрачностью цвета <1. </p>

Есть ли способ удалить 1 пиксель или заполнить его (непрозрачность 1)? 1px не много, но если вы разместите их рядом друг с другом, этот 1px превратится в видимое пустое пространство. Проблема, которую я видел, когда кнопка добавляется в Pane или Group, когда используется HBox или VBox, что 1px заполняется. К сожалению, мне нужно использовать Pane или Group. Я пытался использовать пользовательские вставки, но проблема все еще сохраняется.

Пример кода:

Background background = new Background(new BackgroundFill(Color.GREEN, CornerRadii.EMPTY, Insets.EMPTY));
Font font = new Font("Times New Roman", 16);

Button a = new Button("A");
a.setFont(font);
a.setBackground(background);
a.setLayoutX(10);
a.setLayoutY(10);
pane.getChildren().add(a);

Button aa = new Button("AA");
aa.setFont(font);
aa.setBackground(background);
aa.setLayoutX(10);
aa.setLayoutY(45);
pane.getChildren().add(aa);

Button aaa = new Button("AAA");
aaa.setFont(font);
aaa.setBackground(background);
aaa.setLayoutX(10);
aaa.setLayoutY(80);
pane.getChildren().add(aaa);

Результат (изображение было увеличено, чтобы 1 пиксель был лучше виден):

Как выглядит этот 1px (1px над красными линиями):

Как выглядит 1px

How that 1px looks like

Как это выглядит рядом друг с другом (вы можете видеть, что пространство не белое и не зеленое, а светло-зеленое:

Как это выглядит рядом друг с другом

How it looks like next to each other

1 Ответ

0 голосов
/ 28 апреля 2018

Наблюдаемый эффект является результатом того, что ширина кнопки не является целой. Это приводит к тому, что те части, которые не покрывают пиксель полностью, оказываются полупрозрачными.

Pane к сожалению, не учитывает свойство snapToPixel и просто изменяет размеры дочерних элементов до размеров, вычисленных по его свойствам.

Чтобы исправить это, используйте тип Pane, который привязывает координаты к пикселям, например, VBox или в этом случае AnchorPane без установленных якорей.

Pane pane = new AnchorPane();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...