Когда я генерирую таблицу в JavaFX, столбцы слишком велики, и я хочу изменить их размер, когда он появляется в моем приложении, чтобы уменьшить их. Я прочитал те статьи о stackOverflow, которые полезны, но они мне не помогли: столбец javafx в табличном представлении размер файла ; JavaFX TableColumn изменить размер для соответствия содержимому ячейки . Действительно, в отличие от темы, у меня есть столбцы в моих столбцах, и это не работает. Для информации эти столбцы реагируют одинаково: если мы дважды щелкнем по ним, они автоматически изменят размер. Я пытался воспроизвести эти решения следующим образом:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.util.List;
import java.util.stream.Collectors;
import com.sun.javafx.scene.control.skin.TableViewSkin;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
public class GUIUtils {
private static Method columnToFitMethod;
static {
try {
columnToFitMethod = TableViewSkin.class.getDeclaredMethod("resizeColumnToFitContent",TableColumn.class,int.class);
columnToFitMethod.setAccessible(true);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
public static <S> void autoFitTable(TableView<S> tableView) {
tableView.getItems().addListener(new ListChangeListener<Object>() {
@Override
public void onChanged(Change<?> c) {
for (TableColumn column : tableView.getColumns()) {
try {
List<TableColumn<S, ?>> columns = (List<TableColumn<S, ?>>) column.getColumns.stream().collect(Collectors.toList());
for (TableColumn col : columns) {
columnToFitMethod.invoke(tableView.getSkin(), col, -1);
}
columnToFitMethod.invoke(tableView.getSkin(), column, -1);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
});
}
}
Во время моей второй итерации для дочернего столбца у меня было:
java .lang.reflect.InvocationTargetException на солнце. отражать. refle.Method.invoke (Метод. java: 498) в myPackage.GUIUtils $ 1.onChanged (GUIUtils. java: 37). , , Вызывается: java .lang.NullPointerException в com.sun.javafx.scene.control.skin.TableViewSkin.resizeColumnToFitContent (TableViewSkin. java: 257) ... еще 80
Do у вас есть представление о том, что я могу сделать? Спасибо за вашу помощь