Javafx 有没有办法使用ControlFXJAR将按钮添加到带有文本字段的下拉列表中

Javafx 有没有办法使用ControlFXJAR将按钮添加到带有文本字段的下拉列表中,javafx,javafx-2,javafx-8,Javafx,Javafx 2,Javafx 8,我有一个带有自动完成的文本字段,我想在列表中出现的每个项目旁边显示按钮 这是我的密码 List<String> s = ms.getUsernames(ms.getUser(7).getListamis()); TextFields.bindAutoCompletion(txtsearch, s); List s=ms.getUsernames(ms.getUser(7.getListamis()); TextFields.bindAutoCompletion(txtse

我有一个带有自动完成的文本字段,我想在列表中出现的每个项目旁边显示按钮

这是我的密码

 List<String> s = ms.getUsernames(ms.getUser(7).getListamis());
    TextFields.bindAutoCompletion(txtsearch, s);
List s=ms.getUsernames(ms.getUser(7.getListamis());
TextFields.bindAutoCompletion(txtsearch,s);
这是getUserName的方法

      public List<String> getUsernames(String list_amis) {
       List<String> ls = new ArrayList<>();
       String [] idmember = list_amis.split("/");
        for (String i : idmember) {

            ls.add(getUser(Integer.parseInt(i)).getUsername());

    }
    return ls;
}
public List getUsernames(字符串列表\u amis){
List ls=新的ArrayList();
字符串[]idmember=list\u amis.split(“/”);
for(字符串i:idmember){
add(getUser(Integer.parseInt(i)).getUsername();
}
返回ls;
}
这是我的输出
我想在测试附近添加一个按钮,这样我就可以得到它的ID了,这就是我提出的解决方案。当然,有一种更好的方法更优雅,效果更好,但我想这在很多情况下都适用。不过,您必须对ListView的大小做些什么,我没有在出现ListView可能会改变UI其余部分设计的环境中测试这一点。我建议把整件东西都放在一件府绸或别的什么东西里

import java.util.function.Predicate;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;

public class NewFXMain extends Application {

    @Override
    public void start(Stage primaryStage) {

        ObservableList<String> list = FXCollections.observableArrayList("one","two","three");
        FilteredList<String> filteredList = new FilteredList<>(list);

        VBox box = new VBox();
        TextField textField = new TextField();
        textField.textProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                filteredList.setPredicate(new Predicate<String>() {
                    @Override
                    public boolean test(String s){
                        return s.toLowerCase().contains(newValue.toLowerCase());
                    }
                });
            }
        });

        ListView listView = new ListView();
        listView.setItems(filteredList);
        listView.visibleProperty().bind(textField.textProperty().isNotEmpty());
        listView.setCellFactory(new Callback() {
            @Override
            public Object call(Object param) {
                ListCell cell = new ListCell(){
                    @Override
                    public void updateItem(Object item, boolean empty){
                        if(item != null && !empty){
                            super.updateItem(item, empty);
                            HBox contentBox = new HBox();
                            Label label = new Label(item.toString());
                            Button button = new Button("delete");
                            HBox separator = new HBox();
                            HBox.setHgrow(separator, Priority.ALWAYS);
                            button.setOnAction(new EventHandler<ActionEvent>() {
                                @Override
                                public void handle(ActionEvent event) {
                                    System.out.println(item);
                                }
                            });
                            contentBox.getChildren().addAll(label, separator, button);
                            setGraphic(contentBox);
                        }else{
                            setText(null);
                            setGraphic(null);
                        }
                    }
                };
                return cell;
            }
        });
        box.getChildren().addAll(textField,listView);
        StackPane root = new StackPane();
        root.getChildren().add(box);
        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Autocomplete");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

}
import java.util.function.Predicate;
导入javafx.application.application;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.collections.transformation.FilteredList;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
导入javafx.scene.control.ListCell;
导入javafx.scene.control.ListView;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.Priority;
导入javafx.scene.layout.StackPane;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
导入javafx.util.Callback;
公共类NewFXMain扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
ObservableList=FXCollections.observableArrayList(“一”、“二”、“三”);
FilteredList FilteredList=新的FilteredList(列表);
VBox box=新的VBox();
TextField TextField=新的TextField();
textField.textProperty().addListener(新的ChangeListener()){
@凌驾

public void已更改(observevaluethnks我将尝试此选项