gpt4 book ai didi

javafx-2 - 在表格 View 中自动调整大小列

转载 作者:行者123 更新时间:2023-12-02 11:20:41 25 4
gpt4 key购买 nike

JavaFX 中的 TableView 有 2 个列调整大小策略:

CONSTRAINED_RESIZE_POLICYUNCONSTRAINED_RESIZE_POLICY

但我希望调整列的大小以适合其单元格的内容。

我该怎么做?

最佳答案

三年后我再次回到这个问题,一些建议是计算每个单元格中数据文本的大小(这很复杂,具体取决于字体大小、字体系列、填充...)

但我意识到,当我单击表格标题上的分隔符时,它会根据我的需要调整大小以适合内容。于是我深入研究JavaFX源代码,终于在TableViewSkin中找到了resizeColumnToFitContent方法,但它是protected方法,我们可以通过反射来解析:

import com.sun.javafx.scene.control.skin.TableViewSkin;
import javafx.scene.control.Skin;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

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 void autoFitTable(TableView tableView) {
tableView.getItems().addListener(new ListChangeListener<Object>() {
@Override
public void onChanged(Change<?> c) {
for (Object column : tableView.getColumns()) {
try {
columnToFitMethod.invoke(tableView.getSkin(), column, -1);
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
});
}
}

请注意,我们调用“tableView.getItems()”,因此我们必须在setItems()之后调用此函数

关于javafx-2 - 在表格 View 中自动调整大小列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com