我在scrollPane
中有一张桌子。我的表中有6列。我希望最后两列比其他列更宽。但是在设置了列的大小后,垂直滚动条消失了。如果我注释掉重置列宽的代码,一切都会恢复正常。谁能告诉我这是什么问题?非常感谢!!
我复制了几个相关的维度:
table.setPreferredScrollableViewportSize(new Dimension(900, 500));
feedback = new JScrollPane(table);
feedback.setMinimumSize(new Dimension(900, 400));
调整列大小的代码:
TableColumn column = null;
for (int i = 0; i < 6; i++) {
column = table.getColumnModel().getColumn(i);
if (i == 4) {
column.setPreferredWidth(250); //third column is bigger
} else {
if (i==5) {
column.setPreferredWidth(250);
}
else {
column.setPreferredWidth(100);
}
}
}
答案 0 :(得分:1)
我无法重现您描述的问题。这可能是您的布局有问题,或者可能需要Setting the Scroll Bar Policy。
import javax.swing.*;
import javax.swing.table.*;
public class TablePanel extends JPanel {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("JTable");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.add(new TablePanel());
f.pack();
f.setVisible(true);
}
});
}
public TablePanel() {
TableModel dataModel = new MyTableModel();
JTable table = new JTable(dataModel);
table.setAutoCreateRowSorter(true);
table.getColumnModel().getColumn(0).setPreferredWidth(100);
table.getColumnModel().getColumn(1).setPreferredWidth(150);
table.getColumnModel().getColumn(2).setPreferredWidth(200);
JScrollPane jsp = new JScrollPane(table);
this.add(jsp);
}
private static class MyTableModel extends AbstractTableModel {
@Override
public int getRowCount() {
return 30;
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public Object getValueAt(int row, int col) {
return Math.pow(row, col + 1);
}
@Override
public Class<?> getColumnClass(int col) {
return getValueAt(0, col).getClass();
}
}
}