Имеется приложение с разными контролами в которые можно вводить текст. Хочу что бы когда активировалась клавиатура скрыть курсор. А когда двигается мышь курсор показывался вновь.
Что бы не захламлять ненужным кодом форум, я создал проект 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 (хоть он и не редактируемый) то всё... курсор перестаёт скрываться.
Так как всё таки скрыть курсор при нажатии на клавиатуру?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть класс ClassNameНапример, я обращаюсь к нему ClassName
Встал на Вводе/Выводе поток байтНужно написать метод, который принимает InputStream и OutputStream, считывает все байты из inputStream и записывает в OutputStream...
Есть 2 приложения: Первое приложение представляет собой REST API, работа с которым осуществляется через второе приложение с помощью RestTemplate (получение...