2017-04-18 85 views
0

代碼編輯表列如下對齊文本添加到表格單元格

@FXML 
private TableView<StateTransition> stateTransitionTable; 
@FXML 
private TableColumn<StateTransition, Long> stId; 
@FXML 
private TableColumn<StateTransition, String> stState; 
@FXML 
private TableColumn<StateTransition, String> stNewState; 

private void setTableEditable(Boolean val){ 

ObservableList<String> list = FXCollections.observableArrayList(workFlowSet); 
stState.setCellFactory(ComboBoxTableCell.forTableColumn(new DefaultStringConverter(), list)); 

} 

這段代碼是給組合框表格單元格,但在組合框中的文本是在左邊,我想文本在該ComboBoxTableCell的中心。

卡在這裏,幫助我。

感謝

回答

0

你可以這樣做:

stState.setCellFactory(tableCol -> { 
      ComboBoxTableCell<StateTransition, String> comboBoxTableCell = new ComboBoxTableCell<>(new DefaultStringConverter(), list); 
      comboBoxTableCell.setAlignment(Pos.CENTER); 
      return comboBoxTableCell; 
     }); 

更新: 試試這樣說:

stState.setCellFactory(col -> { 

      return new TableCell<StateTransition, String>() { 

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

        } 
        else{ 
         ComboBox<String> cb = new ComboBox<>(list); 
         cb.setValue(item); 
         cb.setConverter(new DefaultStringConverter()); 
         cb.setStyle("-fx-padding:0.25 0 0.25 3.0"); 
         setGraphic(cb); 

        } 
       } 

      }; 

     }); 
+0

不幸的是,它不工作。你能告訴我如何添加填充到這個,或者任何其他方式,我嘗試** comboBoxTableCell.setPadding(新的Insets(0.25,0,0.25,3.0))**,但失敗。 –

1

您可以使用CSS。如果添加一個樣式表將Scene已經在文件中的以下內容:

.table-column .combo-box .list-cell { 
    -fx-alignment: center; 
} 

.list-cell是其中的重要組成部分(非編輯ComboBox),我只是把.table-column.combo-box因此不是每個ListCell在scene-圖形與中心對齊。

查看JavaFX CSS Reference Guide瞭解更多CSS信息。

+0

是的,CSS是最後一個選項,我用它,但同樣在這裏,** - fx-alignment **不工作,不知道爲什麼,因此截至目前我正在使用** - fx-padding * *作爲備用。如果你能解釋它,然後請解釋。 –