gpt4 book ai didi

java - 上下文菜单仅显示几个 TableView 行 javafx fxml

转载 作者:行者123 更新时间:2023-12-02 04:56:00 28 4
gpt4 key购买 nike

我有一个 TableView,其中我需要每一行都有一个上下文菜单。在此上下文菜单中应该有一个编辑选项和一个删除选项。我写了这个类:

public class ContextMenuRowFactory<T> implements Callback<TableView<T>, TableRow<T>> {

private List<MenuItem> menuItems;

public List<MenuItem> getMenuItems() {
return menuItems;
}

public void setMenuItems(List<MenuItem> menuItems) {
this.menuItems = menuItems;
}

@Override
public TableRow<T> call(TableView<T> view) {
final TableRow<T> row = new TableRow<>();
final ContextMenu menu = new ContextMenu();

menu.getItems().addAll(menuItems);

row.setContextMenu(menu);
row.contextMenuProperty().bind(
Bindings.when(Bindings.isNotNull(row.itemProperty())).then(menu).otherwise((ContextMenu) null));
return row;
}

}

我在 fxml 中这样使用它:

<TableView fx:id="table" layoutX="14.0" layoutY="35.0" prefHeight="660.0" prefWidth="514.0" editable="true">
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
<items>
<FXCollections fx:id="tableData" fx:factory="observableArrayList" />
</items>
<columns>
<TableColumn prefWidth="50" text="Column 1" />
<TableColumn prefWidth="50" text="Column 2" />
</columns>
<rowFactory>
<ContextMenuRowFactory>
<menuItems>
<FXCollections fx:factory="observableArrayList" >
<MenuItem text="Edit" />
<MenuItem text="Remove" />
</FXCollections>
</menuItems>
</ContextMenuRowFactory>
</rowFactory>
</TableView>

但是,它似乎只适用于少数行。在表中,我有 1000 个条目,我可以找到 6/1000 个条目,其中将显示上下文菜单。

最佳答案

一个MenuItem只能属于一个菜单;您正在尝试在您创建的所有 ContextMenu 中使用相同的 MenuItem 实例。

最简单的修复方法就是创建一个 ContextMenu:

import java.util.List;

import javafx.beans.binding.Bindings;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.util.Callback;

public class ContextMenuRowFactory<T> implements Callback<TableView<T>, TableRow<T>> {

private final ContextMenu menu = new ContextMenu();

public List<MenuItem> getMenuItems() {
return menu.getItems();
}

public void setMenuItems(List<MenuItem> menuItems) {
menu.getItems().setAll(menuItems);
}

@Override
public TableRow<T> call(TableView<T> view) {
final TableRow<T> row = new TableRow<>();

row.contextMenuProperty().bind(
Bindings.when(Bindings.isNotNull(row.itemProperty())).then(menu).otherwise((ContextMenu) null)
);
return row;
}

}

关于java - 上下文菜单仅显示几个 TableView 行 javafx fxml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28770391/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com