2015-06-26 2 views
0

У меня есть treeTableView, и в его заголовке есть ярлык и текстовое поле. Я хочу, чтобы ширина текстового поля увеличивалась и при увеличении столбца путем изменения размера.Пригонка ширины текстового поля при изменении размера столбца

Как это сделать?

Как получить динамическую ширину столбца? Или как установить динамическую ширину в текстовое поле по столбцу?

Код:

<TableView fx:id="tableView" layoutX="1.0" layoutY="1.0" 
      minHeight="580.0" prefWidth="434.0" AnchorPane.bottomAnchor="0.0" 
      AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" 
      AnchorPane.topAnchor="0.0" HBox.hgrow="ALWAYS" VBox.vgrow="ALWAYS"> 
    <columns> 
     <TableColumn style="-fx-font-family: Calibri; -fx-font-size: 11px;" text="MessageId"> 
      <cellValueFactory> 
       <PropertyValueFactory property="messageId" /> 
      </cellValueFactory> 
     </TableColumn> 

     <TableColumn prefWidth="110.0" style="-fx-font-family: Calibri; -fx-font-size: 11px;" text="Digest Reference"> 
      <cellValueFactory> 
       <PropertyValueFactory property="digestReference" /> 
      </cellValueFactory> 
     </TableColumn> 

     <TableColumn prefWidth="115.0" style="-fx-font-family: Calibri; -fx-font-size: 11px;" text="Message Reference"> 
      <cellValueFactory> 
       <PropertyValueFactory property="messageRef" /> 
      </cellValueFactory> 
     </TableColumn> 

     <TableColumn prefWidth="115.0" style="-fx-font-family: Calibri; -fx-font-size: 11px;" text="Deal Number"> 
      <cellValueFactory> 
       <PropertyValueFactory property="dealNo" /> 
      </cellValueFactory> 
     </TableColumn> 

     <TableColumn style="-fx-font-family: Calibri; -fx-font-size: 11px;" text="Digest Value"> 
      <cellValueFactory> 
       <PropertyValueFactory property="digestValue" /> 
      </cellValueFactory> 
     </TableColumn> 

     <TableColumn prefWidth="100.0" style="-fx-font-family: Calibri; -fx-font-size: 11px;" text="Updated Date Time"> 
      <cellValueFactory> 
       <PropertyValueFactory property="updateTime" /> 
      </cellValueFactory> 
     </TableColumn> 

    </columns> 

    <columnResizePolicy> 
     <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> 
    </columnResizePolicy> 
</TableView> 

JAVA код:

for (TableColumn<NonRepudiation, ?> tableColumn : tableView.getColumns()) { 

double width = tableColumn.getWidth(); 

VBox vBox = new VBox(); 
vBox.autosize(); 
vBox.setPrefWidth(tableColumn.getMaxWidth()); 

double width = tableColumn.getWidth(); 

VBox vBox = new VBox(); 
vBox.autosize(); 
vBox.setPrefWidth(tableColumn.getMaxWidth()); 

HBox lableBox = new HBox(); 
lableBox.setPrefWidth(width); 
lableBox.getStyleClass().add("labelBoxTxt"); 

StackPane HL = new StackPane(); 
HL.getStyleClass().add("greyBorder"); 

Label label = new Label(tableColumn.getText()); 
label.setPrefWidth(width); 
label.alignmentProperty().setValue(Pos.TOP_LEFT); 

TextField textField = new TextField(); 
textField.setPrefWidth(width); 
textField.textProperty().addListener(filterTable(tableColumn)); 

HBox textInputBox = new HBox(); 
textInputBox.getChildren().add(textField); 
lableBox.getChildren().add(label); 

HBox.setMargin(textField, new Insets(3,3,3,0)); 

vBox.getChildren().addAll(lableBox, HL, textInputBox); 

tableColumn.setGraphic(vBox); 
} 
+0

Хм, как это сделать? Ширина столбца? Скриншот и бит-код помогут найти решение. – NwDev

+0

В коде, который вы отправили, нет ярлыка и текстового поля. –

+0

java код добавлен – php83

ответ

0

Я нашел решение.

Установите класс css для просмотра вашего талбе.

<TableView styleClass="k-table-view" 

Затем добавить класс CSS для VBOX

vBox.getStyleClass().add("k-column-graphic"); 

Добавить правило CSS

.k-table-view .column-header > .label { 
    -fx-content-display: graphic-only; 
} 

.k-column-graphic { 
    -fx-alignment: center-left; 
} 

Я имею динамическую ширину графика.

+0

Является ли это применимым к вашему предыдущему вопросу в комментарии -> «У меня есть этот код - tableView.setTableMenuButtonVisible (true); - Если я сделаю этот текст пустым или пустым, текст заголовка не будет отображаться в раскрывающемся списке. появляется ». ? Поскольку вы показываете только графику. –

+0

После того, как я напишу это правило css. Я могу добиться того, что искал. – php83

0

В основном вам нужно использовать HBox.setHgrow() метод. Здесь не реорганизован код:

for (TableColumn tableColumn : tableView.getColumns()) { 

    // build label 
    Label label = new Label(tableColumn.getText()); 
    HBox lableBox = new HBox(label); 
    lableBox.getStyleClass().add("labelBoxTxt"); 
    lableBox.setAlignment(Pos.CENTER); 

    // build hor line 
    StackPane HL = new StackPane(); 
    HL.getStyleClass().add("greyBorder"); 

    // build text field 
    TextField textField = new TextField(); 
    HBox.setHgrow(textField, Priority.ALWAYS); 
    HBox.setMargin(textField, new Insets(3)); 
    HBox textInputBox = new HBox(textField); 

    // put together 
    VBox vBox = new VBox(lableBox, HL, textInputBox); 
    tableColumn.setText(""); 
    tableColumn.setGraphic(vBox); 
} 
+0

спасибо чувак. Он работает так, как я ожидал. Да здравствует. С уважением. – php83

+0

Можем ли мы использовать что-то другое другое - tableColumn.setText (""); ? – php83

+0

@ php83, почему? вы уже помещаете свой текст этикеткой. –

Смежные вопросы