gpt4 book ai didi

javafx:在编辑期间将 ChoiceBox 附加到 TableColumn 上的 TableCell

转载 作者:行者123 更新时间:2023-11-30 08:48:20 24 4
gpt4 key购买 nike

下面的代码是一个对象的实例方法。

private StringProperty buySell;

// getters
public String getBuySell(){
return this.buySell.get();
}

// return Property Object
public StringProperty buySellProperty(){
return this.buySell;
}

// setters
public void setBuySell(String buySell){
this.buySell.set(buySell);
}

在我的 Controller 类中,我使用以下代码为 buySell 字符串属性创建了一个 TableColumn

当我创建一个事务时,tableView 上会有一个新行。但是,我希望能够编辑 buySell tableCell

问题:如何在 setOnEdit 中嵌入一个带有值 buysellchoicebox 功能,当我双击单元格时,它会给我一个选择框?

下面有我的选择框代码,但我不知道如何将这些东西组合在一起。

    ChoiceBox<BuySell> buySellBox = new ChoiceBox<>();
buySellBox.getItems().addAll("Buy", "Sell");

更新:问题仍未解决。但是,按照此 post 中的答案,这就是我到目前为止所得到的。创建一个对象后,创建了一个表格行,但是当我点击表格单元格 Buy 进行edit 时,没有任何反应(我原以为会出现一个下拉选择框,让我重新选择我的选择)。

我的表格是可编辑的,因为我可以使用上面的代码使用 Volume 编辑 tableCell。

在下面的图片中添加以显示我可以编辑 Volume tableCell,但不能编辑 buySell tableCell,只要我点击它。

enter image description here

最佳答案

在编辑时使用在单元格中创建 ChoiceBox 的单元格工厂。看这个answer .

示例:

    public class Main extends Application {

@Override
public void start(Stage stage) throws Exception {

TableColumn<Item, String> col1 = new TableColumn("Column1");
col1.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
col1.setCellFactory(column -> new TableCel_Edit());
TableColumn<Item, Number> col2 = new TableColumn("Column2");
col2.setCellValueFactory(cellData -> cellData.getValue().valueProperty());
TableView<Item> table = new TableView();
table.setEditable(true);
table.getItems().addAll(loadData());
table.getColumns().addAll(col1, col2);
AnchorPane root = new AnchorPane();
root.getChildren().add(table);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}

public static void main(String... args) {
Application.launch(args);
}

private List<Item> loadData() {
List<Item> list = new ArrayList();
for (int i = 0; i < 10; i++) {
Item item = new Item("item" + i, i);
list.add(item);

}
return list;
}

private class TableCel_Edit extends TableCell<Item, String> {

ChoiceBox<String> buySellBox = new ChoiceBox<>();

public TableCel_Edit() {
buySellBox.getItems().addAll("Buy", "Sell");
buySellBox.getSelectionModel().selectedIndexProperty().addListener((obs, oldValue, newValue) -> {

String value = buySellBox.getItems().get(newValue.intValue());
processEdit(value);
});

}

private void processEdit(String value) {
commitEdit(value);
}

@Override
public void cancelEdit() {
super.cancelEdit();
setText(getItem());
setGraphic(null);
}

@Override
public void commitEdit(String value) {
super.commitEdit(value);
// ((Item) this.getTableRow().getItem()).setName(value);
setGraphic(null);
}

@Override
public void startEdit() {
super.startEdit();
String value = getItem();
if (value != null) {
setGraphic(buySellBox);
setText(null);
}
}

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

} else {
setText(item);
}
}

}

}

更新:在您的 Controller 类中添加以下内容:

fxTransactionLogBuySell.setCellValueFactory(new PropertyValueFactory<Transaction,String>("buySell"));
fxTransactionLogBuySell.setCellFactory(column -> new TableCel_Edit());

您还应该添加此类(将 Item 更改为 Transaction ):

class TableCel_Edit extends TableCell<Item, String> {
....
}

关于javafx:在编辑期间将 ChoiceBox 附加到 TableColumn 上的 TableCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32026947/

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