首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX行未更新

JavaFX行未更新
EN

Stack Overflow用户
提问于 2013-05-25 23:40:49
回答 2查看 329关注 0票数 0

已经有一个非常类似的问题了,但我的问题有点不同。我正在使用属性和观察列表来更改它,它不会更新。最初的问题是here

因此,当我在表之间传输行时,如下所示:

第一行将会出现,但当添加多个行会导致第一行之后的行不更新时,如下所示:

只有当我在列中移动时,它们才会重新出现。

代码语言:javascript
复制
    //Loot identification
    TableColumn lootIdentCol = new TableColumn<>("Identification");

    TableColumn<ItemDef, Integer> lootIDCol = new TableColumn<>("ID");
    lootIDCol.setCellValueFactory(
            new PropertyValueFactory<ItemDef, Integer>("id"));

    TableColumn<ItemDef, String> lootNameCol = new TableColumn<>("Name");
    lootNameCol.setCellValueFactory(
            new PropertyValueFactory<ItemDef, String>("name"));

    lootIdentCol.getColumns().addAll(lootNameCol, lootIDCol);

    //Loot price
    TableColumn<ItemDef, Integer> lootPriceCol = new TableColumn<>("Price");
    lootPriceCol.setCellValueFactory(
            new PropertyValueFactory<ItemDef, Integer>("price"));

    //To loot items table
    toLootItemsTableView.getColumns().addAll(lootIdentCol, lootPriceCol);
    grid.add(toLootItemsTableView, 0, 1);

    //Lootable items table
    lootableItemsTableView.getColumns().addAll(lootIdentCol, lootPriceCol);
    grid.add(lootableItemsTableView, 2, 1);

    toLootItemsTableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    lootableItemsTableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    lootableItemsTableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    toLootItemsTableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

    lootableTableList.add(new ItemDef("Ab", 141, false, false));
    lootableTableList.add(new ItemDef("Ac", 25, false, false));
    lootableTableList.add(new ItemDef("AD", 262, false, false));

    AddRemoveButtons<ItemDef> addRemoveLootButtons = new AddRemoveButtons<>(
            lootableTableList, lootableItemsTableView.getSelectionModel(),
            toLootTableList, toLootItemsTableView.getSelectionModel()
    );

AddRemoveButtons代码:

代码语言:javascript
复制
private final ObservableList<E> fromList;
private final ObservableList<E> toList;

public AddRemoveButtons(final ObservableList<E> fromList, final SelectionModel<E> from,
                        final ObservableList<E> toList, final SelectionModel<E> to) {
    this.fromList = fromList;
    this.toList = toList;

    setAlignment(Pos.CENTER);
    setPadding(new Insets(5, 5, 5, 5));
    setSpacing(15);

    ObservableList<Node> children = getChildren();

    Button moveInto = new Button("Add");
    moveInto.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent mouseEvent) {
            if (from instanceof MultipleSelectionModel) {
                MultipleSelectionModel<E> multipleFrom = (MultipleSelectionModel<E>) from;
                ObservableList<Integer> selectedIndices = multipleFrom.getSelectedIndices();
                for (int i : selectedIndices)
                    transfer(i, true);
            } else
                transfer(from.getSelectedIndex(), true);
        }
    });

    Button delete = new Button("Del");
    delete.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent mouseEvent) {
            if (to instanceof MultipleSelectionModel) {
                MultipleSelectionModel<E> multipleFrom = (MultipleSelectionModel<E>) to;
                ObservableList<Integer> selectedIndices = multipleFrom.getSelectedIndices();
                for (int i : selectedIndices)
                    transfer(i, false);
            } else
                transfer(to.getSelectedIndex(), false);
        }
    });

    children.addAll(moveInto, delete);
}

private void transfer(int index, boolean forward) {
    if (forward)
        toList.add(fromList.remove(index));
    else
        fromList.add(toList.remove(index));
}

实现可识别、可序列化、可比较的ItemDef:

代码语言:javascript
复制
private final String  name;
private final int     id;
private final boolean members;
private final boolean stackable;
private       int     price;

public ItemDef(JSONObject jsonObject) {
    this(
            (String) jsonObject.get("name"),
            Integer.parseInt((String) jsonObject.get("id")),
            Boolean.parseBoolean((String) jsonObject.get("members")),
            Boolean.parseBoolean((String) jsonObject.get("stackable"))
    );
}

public ItemDef(String name, int id, boolean members, boolean stackable) {
    this.name = name;
    this.id = id;
    this.members = members;
    this.stackable = stackable;
    price = -1;
}

public String getName() {
    return name;
}

@Override
public int getId() {
    return id;
}

public boolean isMembers() {
    return members;
}

public boolean isStackable() {
    return stackable;
}

public int getPrice() {
    return price != -1 ? price : updatePrice();
}

//Other methods not relevant
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-26 08:04:08

弄清楚为什么它一直这样做。

您不能在多个表上引用相同的TableColumn。

票数 2
EN

Stack Overflow用户

发布于 2013-06-21 23:49:25

如果希望在多个表中更新数据,则不应在多个表中共享列,因为需要在多个表之间共享数据集,而不是列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16751174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档