2017-03-09 1 views
0

ダーティー/検証済みの行の機能をtableviewコントロールに追加して、新しく追加された行を編集する必要があります。そうしないと、削除されます。 新しく追加された行の最初のセル(編集者がComboboxTableCell)をフォーカスする最良の方法は何ですか。新しい行が追加されます tableview.getItems().getItems().addAll(new Item())Javafx 8 tableview add rowとフォーカス

ありがとうございます。ここ

コントローラのビューのコードである:

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> 

答えて

2

あなたはTableView.edit()方法を使用することができる:someColumnTableColumnある

tableview.getItems().getItems().add(new Item()); 
int lastItemIndex = tableview.getItems().size() - 1 ; 

tableview.edit(lastItemIndex, someColumn); 

をセルを含む編集する必要はありません。

+0

返信ありがとうございました。私はあなたの解決策を試しました。問題は、セル内のコンボボックスが編集モードに切り替わらないことです。私はまた、成功せずにfocusModelを使用しようとしました。 – zpavel

+0

おそらく問題を再現する[MCVE]を作成する必要があります。それを含めるためにあなたの質問を編集してください。 –

+0

私は自分のコードJamesを追加しました。 – zpavel