当我在JavaFX中生成一个表时,列太大了,当它出现在我的应用程序中时,我想调整它们的大小,以减少它们。我在stackOverflow上读了一些有用的文章,但它们并没有帮助我:javafx column in tableview auto fit size;JavaFX TableColumn resize to fit cell content。事实上,与主题不同的是,我的专栏中有列,但它不起作用。对于信息,这些列的反应是一样的,如果我们双击它们,它们就会自动调整大小。我试着复制这样的解决方案:
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();
}
}
}
});
}
}在第二次子列迭代中,我有:
sun.reflect.NativeMethodAccessorImpl.invoke0(Native方法的
java.lang.reflect.InvocationTargetException )在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)的java.lang.reflect.InvocationTargetException,myPackage.GUIUtils$1.onChanged(GUIUtils.java:37)的java.lang.reflect.Method.invoke(Method.java:498)。。。原因: com.sun.javafx.scene.control.skin.TableViewSkin.resizeColumnToFitContent(TableViewSkin.java:257)的java.lang.NullPointerException . 80多人
你知道我能做什么吗?谢谢你的帮助
发布于 2020-01-22 09:06:14
对于那些感兴趣的人来说,我的解决方案是有效的,但是我的一些专栏是看不见的,这就是为什么我有我的异常。只需放置if(col.isVisible())就可以了!
https://stackoverflow.com/questions/59845432
复制相似问题