0
我想向tableview控件添加髒/驗證行的功能,在這裏用戶將被迫編輯新添加的行,否則它將被刪除。 什麼是聚焦第一個單元格(編輯器是ComboboxTableCell
)新增行的最佳方法。新行添加了 tableview.getItems().getItems().addAll(new Item())
Javafx 8 tableview add row and focus
在此先感謝。
這裏是控制器的代碼和視圖:
public class SaleDetailController implements Initializable {
@FXML
private TableView<SaleDetail> saleDetailTable;
@FXML
private TableColumn<SaleDetail, Product> productColumn;
@FXML
private TableColumn<SaleDetail, Integer> quantityColumn;
public void initialize(URL location, ResourceBundle resources) {
productColumn.setCellFactory(ComboBoxTableCell.forTableColumn(FXCollections.observableArrayList(DaoFactory.getProductDao().getAll())));
productColumn.setCellValueFactory(cellData -> new SimpleObjectProperty(cellData.getValue().getProduct()));
quantityColumn.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter()));
quantityColumn.setCellValueFactory(cellData -> new SimpleObjectProperty(cellData.getValue().getQuantity()));
}
@FXML
private void handleRemoveProductButton(ActionEvent event) {
int selectedIndex = saleDetailTable.getSelectionModel().getSelectedIndex();
if (selectedIndex >= 0) {
saleDetailTable.getItems().remove(selectedIndex);
}
}
@FXML
private void handleAddProductButton(ActionEvent event) {
SaleDetail saleDetail = new SaleDetail();
saleDetail.setQuantity(0);
Product product = new Product();
saleDetail.setProduct(product);
saleDetailTable.getItems().addAll(saleDetail);
saleDetailTable.getSelectionModel().selectLast();
saleDetailTable.requestFocus();
saleDetailTable.getFocusModel().focus(saleDetailTable.getItems().size() - 1);
saleDetailTable.edit(saleDetailTable.getFocusModel().getFocusedIndex(), productColumn);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.Font?>
<VBox fx:id="saleDetailView" minWidth="500.0" spacing="15.0" style="-fx-border-style: solid; -fx-border-color: #D3D3D3;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.zpavel.controller.SaleDetailController">
<children>
<HBox spacing="10.0">
<children>
<Label text="Products*" />
<Button mnemonicParsing="false" onAction="#handleAddProductButton" text="Add" />
<Button mnemonicParsing="false" onAction="#handleRemoveProductButton" text="Remove" />
</children>
</HBox>
<TableView fx:id="saleDetailTable" editable="true">
<columns>
<TableColumn fx:id="productColumn" prefWidth="75.0" text="Product*" />
<TableColumn fx:id="quantityColumn" prefWidth="75.0" text="Quantity*" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
<padding>
<Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
</padding>
</VBox>
謝謝您的回覆James。我試過你的解決方案。問題是單元格中的組合框不會切換到編輯模式。我也嘗試過使用focusModel而沒有成功。 – zpavel
您可能需要創建一個[MCVE]來重現問題。編輯您的問題以包含它。 –
我剛剛加了我的代碼James。 – zpavel