答案 0 :(得分:2)
以here中提到的间歇渲染伪像为重点,2
字形看起来已经被渲染了两次,一个副本相对于另一个副本在水平方向移动。众所周知,这种明显随机的异常很难识别。各种各样的原因可能包括incorrect synchronization,improper layout,主机平台的rendering pipeline中的缺陷等。作为参考,下面的示例可能使您可以在不同的平台上进行测试。
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:
在image中引起模糊效果的细节是一个复合边框,下面以2倍显示:
在这里可以看到按钮(上排)和默认按钮(下排)的可比效果: