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

JavaFX TableView是否可以部分编辑?

锺伟志
2023-03-14

我有一个JavaFX TableView,它有两列。此表使用观察列表gas RatioRES作为其模型。

public class GasRatioMeasureBean {
    private String number;
    private String measure;
    public String getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = "Measure" + (number + 1) + "(%)";
    }
    public String getMeasure() {
        return measure;
    }
    public void setMeasure(String measure) {
        this.measure = measure;
    }
}

我想将其中一个设置为可编辑,另一个设置为不可编辑。

首先,我尝试了FXML方法:

<TableView layoutX="24.0" layoutY="122.0" prefHeight="200.0" prefWidth="215.0" fx:id="measureTableView">
    <columns>
         <TableColumn editable="false" prefWidth="100.0" sortable="false" text="No" fx:id="measureNumbersColumn" />
         <TableColumn editable="true" prefWidth="110.0" sortable="false" text="Measures" fx:id="measuresColumn" />
    </columns>
</TableView>

但这不管用。表格始终不可编辑。

我还尝试了java方式:

private void initMeasuresTableView() {
    measureNumbersColumn.setCellValueFactory(new PropertyValueFactory<GasRatioMeasureBean, String>("number"));
    measureNumbersColumn.setEditable(false);
    measuresColumn.setCellValueFactory(new PropertyValueFactory<GasRatioMeasureBean, String>("measure"));
    measuresColumn.setOnEditCommit(
        new EventHandler<CellEditEvent<GasRatioMeasureBean, String>>() {
            public void handle(CellEditEvent<GasRatioMeasureBean, String> measure) {
                ((GasRatioMeasureBean) measure.getTableView().getItems().get(
                measure.getTablePosition().getRow())
                ).setMeasure(measure.getNewValue());
            }
        }
    );

    measureTableView.setItems(gasRatioMeasures);
    measureTableView.setEditable(true);
}

但这也不管用。所有的桌子都不能修改。

如果TableColumn有一个可编辑的属性,那么它应该可以单独设置。

如果你知道我哪里做错了,请帮帮我。谢谢。

PS:measureNumbersColumn列已经可以正常显示(当我还没有初始化MeasureColumn时)。

PPS:我也尝试过,而不是setOnEditCommitsetOnEditStartsetOnEditCommit不被调用,但是可以仅在可编辑列中调用setOnEditStart

共有2个答案

赵君植
2023-03-14

这是您可以在TableView中创建可编辑列的方法。

tblViewPerson.set可编辑(true);

        // Making editable columns 
        // For ID

        tblColID.setCellFactory(TextFieldTableCell.forTableColumn());

        tblColID.setOnEditCommit(
            new EventHandler<CellEditEvent<Person, String>>() {
                public void handle(CellEditEvent<Person, String> t) {
                    ((Person) t.getTableView().getItems().get(
                        t.getTablePosition().getRow())
                        ).setId(t.getNewValue());
                }
            }
        );
章岳
2023-03-14

您没有使用支持编辑的单元格工厂。你需要做:

measureNumbersColumn.setCellFactory(TextFieldTableCell.forTableColumn()) 

这将使您的列使用TextFieldTableCell而不是默认的TableCell。TextFieldTableCell支持编辑(查看源代码并查找startEditmethod)。

或者,如果您对TextFieldTableCell的行为不满意,可以编写自己的TableCell实现,并重写startEdit、cancelEdit和updateItem方法。

measureNumbersColumn.setCellFactory(new Callback<TableColumn<GasRatioMeasureBean,String>, TableCell<GasRatioMeasureBean,String>>() {

    @Override
    public TableCell<GasRatioMeasureBean, String> call(
            TableColumn<GasRatioMeasureBean, String> arg0) {
        return MyOwnTableCell(); 
    }
});
 类似资料:
  • 在中可以实现这样的功能吗 注意这里A是部分着色的。 我知道光凭类是不可能的。(文本显示在) 要实现这一点,有什么解决方案可以单独使用Swing或必须使用CSS? 编辑: 如果这是不可能的摆动,任何解决方案与以下标签?

  • 问题内容: 我只需要解码和更新json对象的特定值。问题是我不知道对象的完整结构。encoding / json包“忽略” /截断了结构中未提供的字段,因此对这些字段进行编码会丢失。我想知道是否有可能仅解组我知道的结构,对其进行更新,然后再进行组封而不截断/删除未知的结构/信息。 问题答案: 似乎有可能。

  • 鉴于这些实体和存储库可以访问DDBB中的数据: 我想为方法getTotalPurchaseAmounts(长customerId)添加缓存,这样,当为客户添加一些购买时,只有该客户的purchasesd被逐出。 相关的依赖项是: 相关配置: 由于spring缓存(和ehcache)逐出的次数受元素或所有条目的限制,我开发的解决方案是通过友好方式创建缓存(每个客户一个),这样我就可以逐出这些缓存。

  • 问题内容: 我正在使用React.js作为前端框架来构建一个项目。在一个特定页面上,我正在向用户显示完整的数据集。我有一个包含完整数据集的数组。它是JSON对象的数组。在向用户呈现此数据方面,我目前通过使用Array.map()返回每一项数据来显示整个数据集。 这是朝着正确方向迈出的一步,但是现在我只需要显示数据集的一部分,而不是全部,我还需要一些控件来了解已显示的总数据集的数量,并且有多少数据集

  • 问题内容: 说我有两个JavaBeans 和。 如果创建一个Person对象的列表,我想编组成这样的东西: 可以使用这里描述的技术: 使用JAXB解组/编组List 通过使用和注释JaxbList,可以将其编组为上述XML。 但是,能够重用相同的类来封送对象列表也很好。实际上,我将有许多其他类型的bean。我可以这样: 但是,理想情况下,最好用类名的复数形式替换“列表”,用类名替换“ item”。

  • 问题内容: 我想知道是否可以在Swift中编写内联汇编。 我知道在Objective-C中,您可以使用如下代码: 但是在Swift中似乎无法使用 。 有谁知道如何使用,如果可能的话。我没有找到任何关于它的信息,所以我认为这是一个很好的问题。 问题答案: 要扩展Robert Levy所说的内容,您可以只使用Swift / Obj-C互操作功能,并编写一个可以处理ASM内容的Obj- C类,然后可以从