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我将尝试此选项