【问题标题】:Unable to custom text fill in JavaFX combo-box无法在 JavaFX 组合框中自定义文本填充
【发布时间】:2019-12-04 15:07:47
【问题描述】:

我目前正在使用 JavaFX 2 (JDK 1.8) 开发专业软件。当我在我的工具栏中放置一个 ComboBox 实例时,我找不到在 combo-box-base 中定义文本颜色的方法在列表视图中。

这是 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>

CommonToolBarController 类:

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"));
    }
}

我的 CSS 样式表的 .combo-box 部分:

.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;
}

最后的结果是:一切都很好,直到我选择了一个列表项,然后每个选定的项目都变成白色进入基础并透明进入列表视图。

我尝试在 .combo-box 选择器和之前的选择器中插入 -fx-text-fill 属性,但它永远不会起作用。有人可以解释一下吗? 提前谢谢你:)

【问题讨论】:

  • 更新:我可以通过添加“.combo-box .label”类选择器来更改默认文本颜色。尽管如此,当我选择他时,每个项目仍然消失。
  • 我已经添加了 FXML 视图和它的控制器,对你来说够了吗,还是我要添加其他东西?
  • 不相关:你为什么想要ComboBox&lt;Label&gt;ComboBox&lt;String&gt; 不是更合适吗?
  • 事实上……我不知道。但你是对的!行为不一样:)

标签: css javafx combobox


【解决方案1】:

我通过查看 Oracle 关于 JavaFX ComboBox 组件 (this way) 的文档找到了解决方案,这解释了为什么我选择的项目从列表中消失而没有被删除:

关于将节点插入 ComboBox 项目列表的警告

ComboBox 允许项目列表包含任何类型的元素,包括节点实例。 强烈不建议将节点放入项目列表。这是因为默认的单元格工厂只是将节点项直接插入单元格中,也包括在 ComboBox 的“按钮”区域中。因为场景图一次只允许节点位于一个位置,这意味着当一个项目被选中时,它会从 ComboBox 列表中删除,并在按钮区域中可见。选择更改后,先前选择的项目返回列表,并删除新选择。

我遵循 Zephyr 的建议,使用字符串比使用标签更相关。解决办法是:

  • 将 ComboBox 项替换为 CommonToolBarControllerportSelection.getItems().addAll("COM1", "COM2", "COM3", "COM4");

  • 将这三个选择器添加到 CSS 样式表中:

    .combo-box .list-cell:hover {
        -fx-背景色:#0096C9;
    }
    
    .combo-box .list-cell:focused {
        -fx-文本填充:黑色;
        -fx-font-weight:粗体;
    }
    
    .combo-box .list-view .list-cell:focused {
        -fx-背景色:#0096C940;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多