JTable setPreferredWidth() 用于列显示不正确
JTable setPreferredWidth() for columns displaying incorrectly
我有一个显示了 AbstractTabelModel 的 JTable。我试图在我的项目中创建一个 void 方法,将每列的宽度设置为列中最长值的长度。这是我现在正在使用的方法,其中 "accountWindow" 是 JTable:
public void setColumnWidths(){
accountWindow.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for (int i = 0; i < accountWindow.getColumnCount(); i++){
int greatestStringLength = 2;
for (int z = 0; z < accountWindow.getRowCount(); z++){
if (accountWindow.getValueAt(z, i).toString().length() > greatestStringLength){
System.out.println("Width SET");
greatestStringLength = accountWindow.getValueAt(z, i).toString().length();
accountWindow.getColumnModel().getColumn(i).setPreferredWidth(greatestStringLength);
}
//System.out.println(accountWindow.getValueAt(z, i).toString());
//System.out.println("Greatest Value: " + greatestValueWidth);
}
}
}
在我的控制器 class (MVC) 中正确调用了该方法,但它将每列的宽度设置为基本上为 0。方法在 之后被调用table 已更新并调用 fireTableData() 方法并显示帐户信息。我已将 JTable 添加到滚动窗格。如有任何意见或建议,我们将不胜感激。
宽度需要以像素而不是字符串中的字符为单位指定。
if (accountWindow.getValueAt(z, i).toString().length() > greatestStringLength){
在我看来,您只是获取字符串中的字符数,而不是呈现字符串所需的宽度。也就是说 20 个字符不会以 20 像素呈现。字符串的宽度会因不同的字体而有所不同。
查看 Table Column Adjuster 以获取有关如何确定渲染宽度的解决方案。它提供了一个简单的用法和一个自定义 class,您可以使用它具有更多功能。
两种解决方案实际上都会调用 table 使用的渲染器来确定最大宽度。
我有一个显示了 AbstractTabelModel 的 JTable。我试图在我的项目中创建一个 void 方法,将每列的宽度设置为列中最长值的长度。这是我现在正在使用的方法,其中 "accountWindow" 是 JTable:
public void setColumnWidths(){
accountWindow.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for (int i = 0; i < accountWindow.getColumnCount(); i++){
int greatestStringLength = 2;
for (int z = 0; z < accountWindow.getRowCount(); z++){
if (accountWindow.getValueAt(z, i).toString().length() > greatestStringLength){
System.out.println("Width SET");
greatestStringLength = accountWindow.getValueAt(z, i).toString().length();
accountWindow.getColumnModel().getColumn(i).setPreferredWidth(greatestStringLength);
}
//System.out.println(accountWindow.getValueAt(z, i).toString());
//System.out.println("Greatest Value: " + greatestValueWidth);
}
}
}
在我的控制器 class (MVC) 中正确调用了该方法,但它将每列的宽度设置为基本上为 0。方法在 之后被调用table 已更新并调用 fireTableData() 方法并显示帐户信息。我已将 JTable 添加到滚动窗格。如有任何意见或建议,我们将不胜感激。
宽度需要以像素而不是字符串中的字符为单位指定。
if (accountWindow.getValueAt(z, i).toString().length() > greatestStringLength){
在我看来,您只是获取字符串中的字符数,而不是呈现字符串所需的宽度。也就是说 20 个字符不会以 20 像素呈现。字符串的宽度会因不同的字体而有所不同。
查看 Table Column Adjuster 以获取有关如何确定渲染宽度的解决方案。它提供了一个简单的用法和一个自定义 class,您可以使用它具有更多功能。
两种解决方案实际上都会调用 table 使用的渲染器来确定最大宽度。