![](/img/trans.png)
[英]How can I automatically adjust a TableColumn in JavaFX to the size of the TableView?
[英]automatically resize TableColumn of TableColumn in TableView with JavaFX -8
當我在 JavaFX 中生成一個表時,列太大了,我想在它出現在我的應用程序中時調整它們的大小以減少它們。 我閱讀了有關 stackOverflow 的那些文章,這些文章很有用,但對我沒有幫助: tableview auto fit size 中的 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 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498) 在 myPackage.GUIUtils$1.onChanged(GUIUtils.java:37) 。 . . 引起:在 com.sun.javafx.scene.control.skin.TableViewSkin.resizeColumnToFitContent(TableViewSkin.java:257) 的 java.lang.NullPointerException ... 80 更多
你知道我能做什么嗎? 感謝您的幫助
對於那些感興趣的人,我的解決方案有效,但我的某些專欄不可見,這就是我有例外的原因。 只需輸入 if(col.isVisible()) 就可以了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.