当前位置: 首页 > 知识库问答 >
问题:

在ComboBox列表视图的末尾添加一个按钮

孟乐
2023-03-14

我需要创建一个组合框,可以有一个按钮在其列表视图的结尾。该列表可以添加或删除项目,当项目数量超过5个时,会显示一个滚动条。此外,当选择一个项目时,该列表视图不会自动关闭。

如何像下面的截图一样添加一个按钮“新项目”?

这是源代码:

helloApplication.java

package com.example.demo;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class HelloApplication extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 320, 240);
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }

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

你好控制器.java

package com.example.demo;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;
import javafx.scene.control.skin.ComboBoxListViewSkin;

import java.net.URL;
import java.util.ResourceBundle;

public class HelloController implements Initializable {

    @FXML
    private ComboBox<String> frequencyPlanComboBox;

    @Override
    public void initialize(URL pURL, ResourceBundle pResourceBundle) {
        frequencyPlanComboBox.getItems()
                             .addAll("aaa", "bbb", "ccc");
        ComboBoxListViewSkin<String> comboBoxListViewSkin = new ComboBoxListViewSkin<String>(frequencyPlanComboBox);
        comboBoxListViewSkin.setHideOnClick(false);
        frequencyPlanComboBox.setSkin(comboBoxListViewSkin);
    }
}

您好,查看.fxml

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

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>

<VBox alignment="CENTER" spacing="20.0" xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.demo.HelloController">
    <padding>
        <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
    </padding>

    <Label fx:id="welcomeText" />
   <ComboBox fx:id="frequencyPlanComboBox" prefWidth="150.0" visibleRowCount="5" />
</VBox>

共有1个答案

牟焱
2023-03-14

将空值添加到组合框项列表的末尾,并使用显示该值按钮的自定义列表单元格。

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.control.skin.ComboBoxListViewSkin;

import java.net.URL;
import java.util.ResourceBundle;

public class HelloController implements Initializable {

    @FXML
    private ComboBox<String> frequencyPlanComboBox;

    @Override
    public void initialize(URL pURL, ResourceBundle pResourceBundle) {
        frequencyPlanComboBox.getItems()
                .addAll("aaa", "bbb", "ccc", null);
        ComboBoxListViewSkin<String> comboBoxListViewSkin = new ComboBoxListViewSkin<String>(frequencyPlanComboBox);
        comboBoxListViewSkin.setHideOnClick(false);
        frequencyPlanComboBox.setSkin(comboBoxListViewSkin);

        frequencyPlanComboBox.setCellFactory(lv -> new ListCell<>() {
            private Button button = new Button("Add New...");
            {
                button.setOnAction(e -> {
                    /*
                    Do something
                     */
                    System.out.println("Button pressed");
                });
            }
            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (empty) {
                    setText("") ;
                    setGraphic(null);
                } else if (item == null) {
                    setText("");
                    setGraphic(button);
                } else {
                    setText(item);
                    setGraphic(null);
                }
            }
        });
    }
}

您可能希望尝试设置该单元格的样式,使其看起来未被选中。

 类似资料:
  • 问题内容: 我在情节提要中有一个。我知道如何添加和修改单元格,但是由于某些原因,我无法在后面添加任何其他视图或UI元素。 有没有办法在情节提要中执行此操作?如果没有,我该如何以编程方式执行此操作? 问题答案: 在情节提要中,可以通过为UICollectionView选择单选按钮标题“ Section Footer”,然后将UIButton拖到那里来启用它。您还可以覆盖此功能: 如果您是,则可能还需

  • 问题内容: 这是我所拥有的: 如何编写代码以在列表末尾添加节点? 所以如果我有 我怎么去 其实…我什至不确定是否要添加到最后。我认为添加然后排序是有效的吗?不确定。 谢谢! 问题答案:

  • 将数据写入字符串生成器的逻辑,在由于append(“\n”)而迭代最后一条记录之后,将添加一个我不需要的新空行。

  • 问题内容: 我有一个文本区域,其中包含一些文本,我想再次向其中添加一些行(第一行+我要添加的其他行),但是它不起作用。 我现在的操作方式将擦除旧文本并仅显示新行。 问题答案: 代替使用,使用。 将给定的文本追加到文档末尾。如果模型为null或字符串为null或为空,则不执行任何操作。 这会将文字添加到您的末尾。 另一个选择是使用来从中获取文本,然后操作String(添加或删除或更改String),

  • 注意,这个空间只在最末端可见,因为我不想改变布局。我可以使recycerview有一个50dp的边际底部,但我不想这样做。

  • 问题内容: 我需要在的末尾放置空对象。这是我为此目的所做的一个示例: 我期待着一种更高效,更智能的方式来做到这一点。是否有可能在实际列表内交换,以便将空节点放置在末尾,这样我就不需要其他两个列表(nullStrings,结果)和额外的迭代。 更新资料 排序不适用于我的情况。我仅为测试目的而编写的此示例代码。实际上,我有不同类型的对象。同样,排序也会破坏位置。 说我有这个,如果做排序之类的事情可能会