Java FX TextField Blur - PullRequest
       59

Java FX TextField Blur

0 голосов
/ 31 декабря 2018

Может кто-нибудь сказать мне, почему иногда JavaFX отображает содержимое TextField с эффектом размытия?Это кажется случайным и происходит в любом из моих TextField с.Пожалуйста, смотрите прикрепленное изображение.

enter image description here

1 Ответ

0 голосов
/ 31 декабря 2018

Сосредоточив внимание на упомянутом артефакте прерывистой визуализации здесь , глиф 2 выглядит так, как будто он был визуализирован дважды, причем одна копия смещена горизонтально относительно другой.Такие явно случайные аномалии, как известно, трудно идентифицировать.Множество причин может включать неправильная синхронизация , неправильная компоновка , дефекты в конвейере рендеринга платформы хоста и т. Д. Для справки приведенный ниже пример может позволить вам проверитьнесопоставимые платформы.

image

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 * @see https://stackoverflow.com/a/53989899/230513
 */
public class TextFieldTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("TextFieldTest");
        BorderPane root = new BorderPane();
        root.setCenter(createContent());
        root.setBottom(createVersion());
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private Node createContent() {
        HBox row1 = new HBox(4);
        Label channelsLabel = new Label("Channels:");
        TextField channelsText = new TextField("2");
        channelsText.setPrefWidth(32);
        Label separatorLabel = new Label("Separator:");
        TextField separatorText = new TextField("!");
        separatorText.setPrefWidth(32);
        row1.setPadding(new Insets(8));
        row1.getChildren().addAll(
            channelsLabel, channelsText, separatorLabel, separatorText);
        HBox row2 = new HBox(4, new Label("Label:"), new TextField());
        row2.setPadding(new Insets(8));
        return new VBox(row1, row2);
    }

    private Label createVersion() {
        Label label = new Label(
            System.getProperty("os.name") + " v"
            + System.getProperty("os.version") + "; Java v"
            + System.getProperty("java.version"));
        label.setPadding(new Insets(8));
        return label;
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Как показано в примере Модена , эффект преднамеренного размытия указывает, что текстовое поле имеет значение сфокусировано :

text fields

Детали, которые вызывают размытый эффект в вашем изображении является составной рамкой, видимой ниже в 2x:

text field 2x

Здесь сопоставимые эффекты видны для кнопок (верхний ряд) и кнопок по умолчанию (нижний ряд):

buttons

...