Невозможно заполнить пользовательский текст в поле со списком JavaFX

В настоящее время я работаю над профессиональным программным обеспечением с использованием JavaFX 2 (JDK 1.8). Поскольку я помещаю экземпляр Поле со списком<Ярлык> на свою панель инструментов, я не могу найти способ определить цвет текста как в база со списком, так и в Посмотреть список.

Вот файл FXML CommonToolBar:

<?xml version = "1.0" encoding = "UTF-8"?>

<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.layout.HBox?>

<HBox styleClass = "h-box" xmlns:fx = "http://javafx.com/fxml/1" fx:controller = "stackoverflow.controller.CommonToolBarController">
    <ToolBar prefHeight = "+Infinity" HBox.hgrow = "ALWAYS">
        <items>
            <ComboBox fx:id = "portSelection" prefHeight = "30.0" prefWidth = "100.0"/>
        </items>
    </ToolBar>
</Hbox>

Класс Коммонтулбарконтроллер:

package stackoverflow.controller;

import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.HBox;

public class CommonToolBarController extends HBox {
    @FXML
    private ComboBox<Label> portSelection;

    @FXML
    public void initialize() {
        portSelection.getItems().addAll(new Label("COM1"), 
                                        new Label("COM2"), 
                                        new Label("COM3"), 
                                        new Label("COM4"));
    }
}

Часть .combo-box моего Таблица стилей CSS :

.combo-box-base {
    -fx-border-radius: 5.0;
    -fx-background-radius: 5.0;
}

.combo-box-base:showing {
    -fx-border-radius: 5.0 5.0 0.0 0.0;
    -fx-background-radius: 5.0 5.0 0.0 0.0;
}

.combo-box .list-cell {
    -fx-background-insets: 2.0;
    -fx-background-radius: 3.0;
    -fx-background-color: transparent;
    -fx-text-fill: red;
}

.combo-box .list-cell:hover {
    -fx-background-color: #0096C9;
}

.combo-box .list-view {
    -fx-padding: 5.0 0.0;
    -fx-border-radius: 0.0 0.0 5.0 5.0;
    -fx-background-radius: 0.0 0.0 5.0 5.0;
}

И конечный результат: все хорошо, пока я не выберу элемент списка, затем каждый выбранный элемент становится белым в основе и прозрачным в представлении списка.

Я пытался вставить свойство -fx-текст-заполнить в селектор .combo-box и в предыдущие, но это никогда не работает. Может кто-нибудь объяснить мне, пожалуйста? Заранее спасибо :)

ОБНОВЛЕНИЕ: я могу изменить цвет текста по умолчанию, добавив селектор класса «.combo-box .label». Тем не менее, каждый элемент по-прежнему исчезает, когда я его выбираю.

0009laH 26.07.2019 11:49

Я добавил представление FXML и его контроллер, вам этого достаточно или нужно добавить что-то еще?

0009laH 26.07.2019 13:39
Не связанные: Зачем вам ComboBox<Label>? Разве ComboBox<String> не будет более подходящим?
Zephyr 26.07.2019 22:00

На самом деле... я не знаю. Но ты прав! Поведение не то :)

0009laH 27.07.2019 00:00
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
4
243
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение, изучив документацию Oracle о компоненте JavaFX ComboBox (Сюда), что объясняет, почему мои выбранные элементы исчезают из списка без удаления:

A warning about inserting Nodes into the ComboBox items list

ComboBox allows for the items list to contain elements of any type, including Node instances. Putting nodes into the items list is strongly not recommended. This is because the default cell factory simply inserts Node items directly into the cell, including in the ComboBox 'button' area too. Because the scenegraph only allows for Nodes to be in one place at a time, this means that when an item is selected it becomes removed from the ComboBox list, and becomes visible in the button area. When selection changes the previously selected item returns to the list and the new selection is removed.

Я следую предложению Зефир, работа со строками более актуальна, чем с метками. Решение:

  • Замена элементов ComboBox на Коммонтулбарконтроллер: portSelection.getItems().addAll("COM1", "COM2", "COM3", "COM4");

  • Добавление этих трех селекторов в таблицу стилей CSS:

    .combo-box .list-cell:hover {
        -fx-background-color: #0096C9;
    }
    
    .combo-box .list-cell:focused {
        -fx-text-fill: black;
        -fx-font-weight: bold;
    }
    
    .combo-box .list-view .list-cell:focused {
        -fx-background-color: #0096C940;
    }

Другие вопросы по теме