Java FX TextField模糊

时间:2018-12-31 16:02:15

标签: javafx textfield blur

谁能告诉我为什么JavaFX有时显示TextField的内容并带有模糊效果?它似乎是随机的,并且发生在我的TextField中的任何一个中。请参阅所附图片。

enter image description here

1 个答案:

答案 0 :(得分:2)

here中提到的间歇渲染伪像为重点,2字形看起来已经被渲染了两次,一个副本相对于另一个副本在水平方向移动。众所周知,这种明显随机的异常很难识别。各种各样的原因可能包括incorrect synchronizationimproper layout,主机平台的rendering pipeline中的缺陷等。作为参考,下面的示例可能使您可以在不同的平台上进行测试。

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);
    }
}

Modena示例中所示,故意模糊效果指示文本字段为focused

text fields

image中引起模糊效果的细节是一个复合边框,下面以2倍显示:

text field 2x

在这里可以看到按钮(上排)和默认按钮(下排)的可比效果:

buttons