В настоящее время я работаю над профессиональным программным обеспечением с использованием 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 и в предыдущие, но это никогда не работает. Может кто-нибудь объяснить мне, пожалуйста? Заранее спасибо :)
Я добавил представление FXML и его контроллер, вам этого достаточно или нужно добавить что-то еще?
ComboBox<Label>? Разве ComboBox<String> не будет более подходящим?
На самом деле... я не знаю. Но ты прав! Поведение не то :)






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