2017-04-18 96 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 * *作为备用。如果你能解释它,然后请解释。 –