Скрыть курсор при вводе текста

134
10 июня 2021, 14:40

Имеется приложение с разными контролами в которые можно вводить текст. Хочу что бы когда активировалась клавиатура скрыть курсор. А когда двигается мышь курсор показывался вновь.

Что бы не захламлять ненужным кодом форум, я создал проект JavaFX по умолчанию и добавил пару строк:

package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Cursor;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();

        primaryStage.addEventHandler(KeyEvent.KEY_PRESSED, e ->{
            primaryStage.getScene().setCursor(Cursor.NONE);
            System.out.println("press = " + e.getCharacter()); // Просто проверка
        });
        primaryStage.addEventHandler(MouseEvent.MOUSE_MOVED, e ->{
            primaryStage.getScene().setCursor(Cursor.DEFAULT);
        });
    }
    public static void main(String[] args) {
        launch(args);
    }
}

И в sample.fxml добавил пару контроллеров

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.BorderPane?>
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="200.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1">
   <top>
      <ComboBox editable="true" prefWidth="150.0" BorderPane.alignment="CENTER">
         <BorderPane.margin>
            <Insets bottom="10.0" top="10.0" />
         </BorderPane.margin>
      </ComboBox>
   </top>
   <center>
      <TextArea editable="false" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
   </center>
</BorderPane>

И програмка не работает как ожидалось :(. Или ComboBox или TextArea всегда в фокусе и они видимо как то перебивают слушателя, т.к. строка

System.out.println("press = " + e.getCharacter());

Никакие сообщения не выводит. Но если добавить например не редактируемый ComboBox

<bottom>
      <ComboBox prefWidth="150.0" BorderPane.alignment="CENTER">
         <BorderPane.margin>
            <Insets bottom="10.0" top="10.0" />
         </BorderPane.margin>
      </ComboBox>
   </bottom>

То когда этот нерадактируемый ComboBox в фокусе, то програмка работает как и ожидалось. При нажатии на клавиши курсор скрывается, а при движении мыши он показывается вновь. Хотя если фокус переместить на редактируемый ComboBox или TextArea (хоть он и не редактируемый) то всё... курсор перестаёт скрываться.

Так как всё таки скрыть курсор при нажатии на клавиатуру?

READ ALSO
Кириллица в HTML в Spring MVC проекте

Кириллица в HTML в Spring MVC проекте

Делаю свой сайт на спрингеВсё работает

163
Как получить название метода после ClassName&hellip;?

Как получить название метода после ClassName…?

У меня есть класс ClassNameНапример, я обращаюсь к нему ClassName

103
Как записать в OutputStream только четные индексы?

Как записать в OutputStream только четные индексы?

Встал на Вводе/Выводе поток байтНужно написать метод, который принимает InputStream и OutputStream, считывает все байты из inputStream и записывает в OutputStream...

132
Как пройти авторизацию в spring boot REST API из REST client&#39;a?

Как пройти авторизацию в spring boot REST API из REST client'a?

Есть 2 приложения: Первое приложение представляет собой REST API, работа с которым осуществляется через второе приложение с помощью RestTemplate (получение...

116