Проблема с цветом границы области прокрутки текстовой области Javafx

У меня проблема в текстовой области javafx: когда я фокусирую текстовую область, применяется граница... это нормально.

Но когда я перетаскиваю ручку полосы прокрутки, фокус границы текстовой области теряется.

Смотрите изображение ниже:

Это моя простая текстовая область:

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

Область текста изменилась при фокусировке следующим образом:

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

Но когда я прокручиваю текстовую область с помощью дескриптора прокрутки, граница изменяется, как и в предыдущем (не сфокусированном) состоянии:

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

Есть ли способ управлять текстовой областью в области прокрутки (в текстовой области)?


person CTO - Abid Maqbool    schedule 04.12.2018    source источник
comment
Это нормальное поведение, а не проблема: как только вы нажмете на полосу прокрутки, вы потеряете фокус с других элементов пользовательского интерфейса, фокус будет перенесен на скроллер.   -  person Mohamed Benmahdjoub    schedule 04.12.2018
comment
Спасибо, за быстрый ответ. Это нормально! Я также применил класс scroll-pane:hove, который работает так, как я хочу. Но как удалить границу из текстовой области, когда сфокусировано панорамирование прокрутки. Означает, что таким образом применены две границы, которые я не хочу... какие-либо предложения? Изображение с двумя границами при прокрутке! [![Изображение с двумя границами при прокрутке в текстовой области][1]][1] [1]: i.stack.imgur.com/7SRnX.png   -  person CTO - Abid Maqbool    schedule 05.12.2018


Ответы (1)


Один из возможных обходных путей — не позволять фокусироваться на ScrollPane в TextArea. т.е., в тот момент, когда ScrollPane получает фокус, мы принудительно фокусируемся на TextArea. Таким образом, фокус всегда будет на TextArea.

import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;

public class CustomTextArea extends TextArea {
    private ScrollPane textAreaScrollPane;

    @Override
    protected void layoutChildren() {
        super.layoutChildren();
        if (textAreaScrollPane == null) {
            textAreaScrollPane = (ScrollPane) lookup(".scroll-pane");
            textAreaScrollPane.focusedProperty().addListener((obs, oldVal, focused) -> {
                if (focused) {
                    requestFocus();
                }
            });
        }
    }
}

И вы будете использовать этот CustomTextArea в своем приложении.

TextArea textArea = new CustomTextArea();
person Sai Dandem    schedule 10.12.2018
comment
очень хелп полный но если это уже реализовано во встроенных компонентах. тогда это очень хорошо. Также, как я реализую это во всех text-area во всем моем проекте.. - person CTO - Abid Maqbool; 10.12.2018
comment
Вы создадите новый настраиваемый элемент управления с этой функцией и будете использовать его в своем приложении. (обновил мой ответ) - person Sai Dandem; 10.12.2018
comment
Ха-ха .. я думаю, вы прокомментировали здесь другой post ;) - person Sai Dandem; 10.12.2018