TransWikia.com

Исправление размытых областей в TextField

Stack Overflow на русском Asked by Denis Kukharenko on August 30, 2021

При создании окна в котором ввожу название сохранения столкнулся с проблемой.

Вводимый внутри TextField текст становится немного размытым, раздражающим глаз. Помимо этого явно заметно как в некоторых областях поля ввода столбец указывающий текущее положение размыт, а в некоторых четкий – такой каким должен быть.

UPD: Это видимо как-то касается моего JavaFX в целом. Суть в том что пытаясь исправить это в Scene Builder заметил что в полях ввода самого билдера (например при поиске нужного компонента) происходит то же самое размытие что и в моих примерах. Проверил в swing с JTextField и там подобных проблем нет.

Скриншоты для примера:

С размытием

Без размытия

Это возможно исправить?

Код всего фрагмента, на всякий случай:

 private void inputSaveName() {

   Stage nameStage = new Stage();
   nameStage.initModality(Modality.WINDOW_MODAL);
   nameStage.initOwner(saveStage);
   nameStage.initStyle(StageStyle.UNDECORATED);
   nameStage.initStyle(StageStyle.TRANSPARENT);

   BorderPane saveBorder = new BorderPane();
   saveBorder.setStyle("-fx-background-color:saddlebrown;" +"-fx-border-width:5;" + "-fx-border-radius:16;" + "-fx-font-family: Cambria;" + "-fx-border-color:olive");
   Scene nameScene = new Scene (saveBorder,300,120);
   nameScene.setFill(Color.TRANSPARENT);

   Rectangle rect = new Rectangle(300,120);
   rect.setArcHeight(40.0);
   rect.setArcWidth(40.0);
   saveBorder.setClip(rect);

   Button acceptNameButton = new Button("Accept");
   Button cancelNameButton = new Button("Cancel");

   acceptNameButton.setStyle("-fx-background-color: darkkhaki;" + "-fx-background-insets: 0 2 2 0;" + "-fx-padding: 8;" + "-fx-font-size:15;" + "-fx-text-alignment: 

center");
   cancelNameButton.setStyle("-fx-background-color: darkkhaki;" + "-fx-background-insets: 0 0 2 2;" + "-fx-padding: 8;" + "-fx-font-size:15;" + "-fx-text-alignment: 

center");

   cancelNameButton.setOnAction(new EventHandler<ActionEvent>() {
  
     @Override
     public void handle(ActionEvent ae) {

       nameStage.close();
     }
   });

   TextField nameField = new TextField();
   nameField.setPromptText("Write save name");
   nameField.setFont(new Font(18));

   HBox buttonBox = new HBox();
   buttonBox.setAlignment(Pos.CENTER);

   buttonBox.setHgrow(acceptNameButton, Priority.ALWAYS);
   buttonBox.setHgrow(cancelNameButton, Priority.ALWAYS);

   acceptNameButton.setMaxWidth(130);
   cancelNameButton.setMaxWidth(130);

   buttonBox.getChildren().addAll(acceptNameButton,cancelNameButton);
  

   saveBorder.setBottom(buttonBox);
   saveBorder.setCenter(nameField);

   nameStage.setScene(nameScene);
   nameStage.show();


 }

2 Answers

введите сюда описание изображения

На вкладке Layout есть два параметра (Layout X, Layout Y) если там стоит 9,8999999 или что то подобное, нужно выставить в 0 через SceneBuilder или в можно через .fxml. Мне помогло, возможно поможет.

Answered by EugeneTM on August 30, 2021

Если в Java существует что-то подобное, то можно попробовать отключить визуализацию Anti-Aliasing и SubPixel:

SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);

(P.s. Я не знаю Java и Javafx, но я сталкивался с похожим вопросом в WPF, поэтому решил написать. Если я категорически не прав я удалю ответ сразу после того как меня поправят)

Answered by Nik4ant on August 30, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP