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

JavaFX中每行都有删除按钮的ListView

盛超
2023-03-14

如何在JavaFX中创建listview每行都有删除按钮和删除按钮操作?

共有1个答案

白和泽
2023-03-14

这里有一个SSCE主要是基于这个ANWER。

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
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.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class SO extends Application {
    static class XCell extends ListCell<String> {
        HBox hbox = new HBox();
        Label label = new Label("");
        Pane pane = new Pane();
        Button button = new Button("Del");

        public XCell() {
            super();

            hbox.getChildren().addAll(label, pane, button);
            HBox.setHgrow(pane, Priority.ALWAYS);
            button.setOnAction(event -> getListView().getItems().remove(getItem()));
        }

        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            setText(null);
            setGraphic(null);

            if (item != null && !empty) {
                label.setText(item);
                setGraphic(hbox);
            }
        }
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        StackPane pane = new StackPane();
        Scene scene = new Scene(pane, 300, 150);
        primaryStage.setScene(scene);
        ObservableList<String> list = FXCollections.observableArrayList(
                "Item 1", "Item 2", "Item 3", "Item 4");
        ListView<String> lv = new ListView<>(list);
        lv.setCellFactory(param -> new XCell());
        pane.getChildren().add(lv);
        primaryStage.show();
    }

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

最重要的修改是这一行

button.setOnAction(event -> getListView().getItems().remove(getItem()));

其中此单元格表示的项从ListView的项列表中移除。

 类似资料:
  • 我正在开发一个android应用程序,其中我制作了一个ListView。我必须为ListView中的每一行添加两个按钮。这两个按钮分别是“添加”和“删除”。当用户选择其中一个按钮时,应采取一些措施。我该怎么做?

  • 我正在使用JavaFX构建一个calander/planner应用程序。该应用程序包括一个单一的GridPane与35(7x5)VBox的。在这些VBox中有任务按钮(在下面实现)。当我右键单击任务框时,它将把文本变成灰色,当我左键单击TsskButton时,我希望它删除按钮。我已经知道的事情。 AnchorPaneNode(扩展VBox)没有静态getChildren()方法 我无法为窗格创建单

  • 我试图创建一个应用程序,用户在其中输入多个边,然后单击按钮,从场景中删除任何当前形状,并生成具有指定边数的形状。 虽然生成形状的逻辑正在工作,但实现似乎不起作用? 任何帮助都非常感谢,谢谢!

  • 我有一个TableView,它沿着一列生成按钮: 构建任务管理应用程序。我希望能够删除按钮所在的行,而不是按下相应按钮时选择的行。 My table类实现了EventHandler,因此按下TableView中的按钮时会运行handle()方法: 唯一缺少的是如何检测按下按钮的行,然后将其删除(因为所有按钮都运行相同的句柄方法)。非常感谢你的帮助。 为清晰起见,请将代码转储到此处:https://

  • 我正在用C#WPF做一个项目,它包含在一个客户机管理中,在那里我添加了新的客户机,在一个txt文档中有save,我有一个listview,在那里我可以看到所有添加的客户机,但现在我想实现一个delete按钮,在那里我从listview中选择一个客户机,并可以删除它。如果我现在做的正确,如果有人能帮我…,…谢谢。

  • 我在excel表中有从A列到F列的数据。 我在页面中间的其他列中创建了一个按钮,比如H5 有什么方法可以保留按钮,即使整个行被删除。我尝试锁定单元格,窗格和拆分。 但运气不好。你能帮我做这件事吗?