如何在组合框和列表的选项中添加标签?

靛青

我阅读了以下文档,即http://docs.oracle.com/javafx/2/ui_controls/combo-box.htm,但没有找到与我的需求相似的东西。我一直在寻找一种在组合框中对选项进行分组的方法。假设我的组合框是持续时间。我有以下选择:-过去1小时,过去2小时,过去24小时,上周,过去30天,过去3个月,去年。我要在组合框中添加标签“短时间”和“长时间”。用户只能选择一个,但是它看起来像:

Short Duration
Last Hour
Last 2 hours
Last 24 Hours

Long Duration
Last Month
Last year

短持续时间和长持续时间就像标题。您无法点击它们。

谢谢!

注意:我不是在说 Label ab = new Label ("Short duration");

这是我的代码(我尝试在combobox中插入标签作为选项,但是可以选择它)

ComboBox combobox_print_options = new ComboBox();
combobox_print_options.setPromptText("Choose the button you wish to click");

Label table = new Label("Table");
combobox_print_options.getItems().addAll(
table, 
"a",
"b");
詹姆斯·D

为您的组合框创建一个项目类,以声明该项目是否为可选项目。(您还可以在此添加其他有用的API,例如方便的访问器,以达到其所代表的时间)。

然后,使用单元格工厂禁用禁用表示无法选择的项目的单元格:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class ComboBoxWithSections extends Application {

    @Override
    public void start(Stage primaryStage) {
        ComboBox<ComboBoxItem> combo = new ComboBox<>();
        combo.getItems().addAll(
            new ComboBoxItem("Short Duration", false),
            new ComboBoxItem("Last Hour",      true),
            new ComboBoxItem("Last 2 hours",   true),
            new ComboBoxItem("Last 24 hours",  true),
            new ComboBoxItem("",               false),
            new ComboBoxItem("Long Duration",  false),
            new ComboBoxItem("Last Month",     true),
            new ComboBoxItem("Last Year",      true)            
        );

        combo.setCellFactory(listView -> new ListCell<ComboBoxItem>() {
            @Override
            public void updateItem(ComboBoxItem item, boolean empty) {
                super.updateItem(item, empty);
                if (empty) {
                    setText(null);
                    setDisable(false);
                } else {
                    setText(item.toString());
                    setDisable(! item.isSelectable());
                }
            }
        });

        BorderPane root = new BorderPane(null, combo, null, null, null);
        primaryStage.setScene(new Scene(root, 250, 400));
        primaryStage.show();
    }

    public static class ComboBoxItem {
        private final String name ;
        private final boolean selectable ;

        public ComboBoxItem(String name, boolean selectable) {
            this.name = name ;
            this.selectable = selectable ;
        }

        public String getName() {
            return name ;
        }

        public boolean isSelectable() {
            return selectable ;
        }

        @Override
        public String toString() {
            return name ;
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

更新这已在其他地方得到解答,但我将使用CSS PseudoClass和外部CSS文件来更改标头的样式

添加

    final PseudoClass header = PseudoClass.getPseudoClass("section-header");

更改为start(...)方法,并updateItem(...)如下更改单元工厂的方法:

        public void updateItem(ComboBoxItem item, boolean empty) {
            super.updateItem(item, empty);
            if (empty) {
                setText(null);
                setDisable(false);
                pseudoClassStateChanged(header, false);
            } else {
                setText(item.toString());
                setDisable(! item.isSelectable());
                pseudoClassStateChanged(header, ! item.isSelectable());
            }
        }

现在将css文件附加到Scene

    scene.getStylesheets().add("combo-box-with-sections.css");

和css文件可能看起来像

combo-box-with-sections.css:

.combo-box-popup .list-cell {
    -fx-padding: 4 0 4 20 ;
}

.combo-box-popup .list-cell:section-header {
    -fx-font: italic 10pt sans-serif ;
    -fx-padding: 4 0 4 5 ;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在rails的时区下拉列表中添加标签

来自分类Dev

如何在选项标签内添加标签?

来自分类Dev

如何在PySide中添加标签

来自分类Dev

如何在div中添加标签

来自分类Dev

如何在div中添加标签

来自分类Dev

如何在通用组合框中添加更多选项

来自分类Dev

sencha如何在tabpanel中动态添加标签,并将列表添加到tabpanel

来自分类Dev

如何在Visual Studio 2013和TFS 2013中向工作项添加标签?

来自分类Dev

如何在css和html中的百分比栏上添加标签?

来自分类Dev

如何在bokeh中的点上添加标签?

来自分类Dev

如何在Github提交中添加标签?

来自分类Dev

如何在CAShapeLayer中添加标签或文本

来自分类Dev

如何在JAVAFX中创建“添加标签”按钮?

来自分类Dev

如何在js数组中添加标签?

来自分类Dev

如何在networkx的图形中的节点上添加标签?

来自分类Dev

如何在FactoryGirl Topic对象中添加标签?

来自分类Dev

如何在片段交易中添加标签?

来自分类Dev

如何在 Microsoft Word 中添加标签词?

来自分类Dev

如何在渐变顶部添加标签?

来自分类Dev

如何在每个以编程方式添加的文本框旁边添加标签

来自分类Dev

如何在JavaScript中添加和删除新元素,例如列表,输入框和选项选择

来自分类Dev

如何在 ARKit 中使用手势动作在 SCNNode 中添加标签节点和用户图像?

来自分类Dev

如何根据excel中用户窗体上的组合框选择添加标签和文本框

来自分类Dev

如何在VBox中增加标签

来自分类Dev

如何在 Google 标签管理器中的不同 HTML 位置添加标签?

来自分类Dev

如何在Grails中为select(组合框)使用和创建标签库

来自分类Dev

如何在JFreeChart折线图中添加标签值和错误栏?

来自分类Dev

如何在matplotlib.pyplot.matshow图上添加标签和标题?

来自分类Dev

如何在UICollectionView的节标题中动态添加标签和按钮?

Related 相关文章

  1. 1

    如何在rails的时区下拉列表中添加标签

  2. 2

    如何在选项标签内添加标签?

  3. 3

    如何在PySide中添加标签

  4. 4

    如何在div中添加标签

  5. 5

    如何在div中添加标签

  6. 6

    如何在通用组合框中添加更多选项

  7. 7

    sencha如何在tabpanel中动态添加标签,并将列表添加到tabpanel

  8. 8

    如何在Visual Studio 2013和TFS 2013中向工作项添加标签?

  9. 9

    如何在css和html中的百分比栏上添加标签?

  10. 10

    如何在bokeh中的点上添加标签?

  11. 11

    如何在Github提交中添加标签?

  12. 12

    如何在CAShapeLayer中添加标签或文本

  13. 13

    如何在JAVAFX中创建“添加标签”按钮?

  14. 14

    如何在js数组中添加标签?

  15. 15

    如何在networkx的图形中的节点上添加标签?

  16. 16

    如何在FactoryGirl Topic对象中添加标签?

  17. 17

    如何在片段交易中添加标签?

  18. 18

    如何在 Microsoft Word 中添加标签词?

  19. 19

    如何在渐变顶部添加标签?

  20. 20

    如何在每个以编程方式添加的文本框旁边添加标签

  21. 21

    如何在JavaScript中添加和删除新元素,例如列表,输入框和选项选择

  22. 22

    如何在 ARKit 中使用手势动作在 SCNNode 中添加标签节点和用户图像?

  23. 23

    如何根据excel中用户窗体上的组合框选择添加标签和文本框

  24. 24

    如何在VBox中增加标签

  25. 25

    如何在 Google 标签管理器中的不同 HTML 位置添加标签?

  26. 26

    如何在Grails中为select(组合框)使用和创建标签库

  27. 27

    如何在JFreeChart折线图中添加标签值和错误栏?

  28. 28

    如何在matplotlib.pyplot.matshow图上添加标签和标题?

  29. 29

    如何在UICollectionView的节标题中动态添加标签和按钮?

热门标签

归档