gpt4 book ai didi

java - 如何获得正确的 JTable 宽度?

转载 作者:行者123 更新时间:2023-11-30 08:43:56 25 4
gpt4 key购买 nike

我想得到一个表格宽度。我试着用这段代码来做:

private static class ListenerForOk implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
handle();
if (!dataIsNotInput()) {
createDataTab();
System.out.println(table.getWidth());
}
}

方法 createDataTab() 完成添加 JTable 的所有工作。因此,在 createDataTab(); 之后,我的表格位于框架上并且我可以看到它。但是这段代码 table.getWidth() 返回零。我尝试使用此代码获取表格宽度的另一种方法:

    double sum = 0.0;
for (int i = 0; i < table.getColumnCount(); i++) {
sum += table.getColumnModel().getColumn(i).getWidth();
}
System.out.println("sum: " + sum);

table.getColumnModel().getColumn(i).getWidth() 方法为所有列返回 75。这是正确的值,我有一个正确的表格宽度。但是在我的表类中,我重写了一种方法。这是我的代码:

class MyTable extends JTable {

@Override
public Component prepareRenderer(TableCellRenderer renderer, int row,
int column) {
Component component = super.prepareRenderer(renderer, row, column);
int rendererWidth = component.getPreferredSize().width;
TableColumn tableColumn = getColumnModel().getColumn(column);
tableColumn
.setPreferredWidth(Math.max(rendererWidth
+ getIntercellSpacing().width,
tableColumn.getPreferredWidth()));

return component;
}

因此,如果我在任何列中输入一个长字符串,该列将相应地扩展并包含其中的文本。我做到了,并且列被扩展了。但在那之后,方法 table.getColumnModel().getColumn(i).getWidth(); 再次为所有列返回 75。那么,如何获得正确的表格宽度。

最佳答案

调整列宽的基本代码是:

JTable table = new JTable( ... );
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );

for (int column = 0; column < table.getColumnCount(); column++)
{
TableColumn tableColumn = table.getColumnModel().getColumn(column);
int preferredWidth = tableColumn.getMinWidth();
int maxWidth = tableColumn.getMaxWidth();

for (int row = 0; row < table.getRowCount(); row++)
{
TableCellRenderer cellRenderer = table.getCellRenderer(row, column);
Component c = table.prepareRenderer(cellRenderer, row, column);
int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
preferredWidth = Math.max(preferredWidth, width);

// We've exceeded the maximum width, no need to check other rows

if (preferredWidth >= maxWidth)
{
preferredWidth = maxWidth;
break;
}
}

tableColumn.setPreferredWidth( preferredWidth );
}

您还可以查看 Table Column Adjuster对于包含上述代码并添加额外功能(如数据更改时自动列调整)的类。

关于java - 如何获得正确的 JTable 宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33997328/

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