Когда я использую следующий код для добавления TextField в каждую колонку:TableColumn.setGraphic под заголовком столбца
tableColumn.setGraphic(textField);
текстовое поле получает расположено на левой стороне этикетки, делая столбцы выглядеть следующим образом:
Если я перетащить столбец шириной, я вижу, что этикетка еще там
Есть ли способ, чтобы колонка использовала оригинальную метку и помещала текстовое поле под ним? Я попытался добавить свой собственный ярлык в VBox вместе с текстовым полем, но тогда вы потеряете функцию автоматической ширины.
После ответа James_D метка верна, но стиль столбца все еще немного странный?
MVCE:
public class TableViewTEST extends Application {
List<TableColumn> listOfColumns = new ArrayList();
TableView tableView = new TableView();
public static void main(String[] args) {
launch(args);
}
public void buildData() {
TableColumn myColumn = new TableColumn("asd");
TableColumn myColumn2 = new TableColumn("qq");
listOfColumns.add(myColumn);
listOfColumns.add(myColumn2);
//add columns dynamically
int counter = 0;
for (TableColumn col : listOfColumns) {
final int j = counter;
col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<MyTableRow, String>, ObservableValue<String>>() {
public ObservableValue<String> call(TableColumn.CellDataFeatures<MyTableRow, String> param) {
return new SimpleStringProperty(param.getValue().rowData.get(j));
}
});
counter++;
TextField txtField = new TextField();
VBox vbox = new VBox();
vbox.getChildren().add(txtField);
col.setGraphic(vbox);
tableView.getColumns().add(col);
}
tableView.setRowFactory(tv -> {
MyTableRow rowz = new MyTableRow();
rowz.setOnMouseClicked(event -> {
if (event.getClickCount() == 2 && (!rowz.isEmpty())) {
}
});
return rowz;
});
}
@Override
public void start(Stage stage) throws Exception {
FlowPane flowpane = new FlowPane();
flowpane.getChildren().add(tableView);
buildData();
Scene scene = new Scene(flowpane);
scene.getStylesheets().add(TableViewTEST.class.getResource("css.css").toExternalForm());
stage.setScene(scene);
stage.show();
}
}
Благодаря @james_D Но все-таки, форматирование столбца выглядит довольно странно? Я обновлю свой вопрос – miniHessel
Я не могу воспроизвести это. Возможно, экспериментируйте с параметрами min/prefWidth текстового поля и столбца. –
Но они всегда будут меняться в зависимости от пользовательских данных – miniHessel