Java JTable无法设置列宽 [英] Java JTable cannot set width of column
问题描述
我尝试设置列的宽度,但是它根本没有用,我一直在寻找答案几个小时,这是我的代码,谁能告诉我是什么问题.预先感谢.
I try to set width for the columns, but it didn't work at all, I have been searching for answers for hours, and here is my code, can anyone tell me what is the problem. Thanks in advance.
String [] columns = {"Day","StratTime","EndTime","Description"};
mtbl = new DefaultTableModel();
tbl = new JTable(mtbl);
jsPane = new JScrollPane(tbl);
tbl.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for (int i = 0; i < Timedcolumns.length; i++) {
mtbl.addColumn(columns[i]);
tbl.getColumnModel().getColumn(i).setPreferredWidth(100);
}
推荐答案
由于addColumn()
的结果,JTable
可能最终重建了所有列.这是JTable.tableChanged()
的片段:
As a result of addColumn()
, JTable
may end up rebuilding all the columns. Here is a snippet from JTable.tableChanged()
:
public void tableChanged(TableModelEvent e) {
if (e == null || e.getFirstRow() == TableModelEvent.HEADER_ROW) {
...
if (getAutoCreateColumnsFromModel()) {
// This will effect invalidation of the JTable and JTableHeader.
createDefaultColumnsFromModel();
return;
}
...
由于DefaultTableModel
执行addColumn()
而触发
TableModelEvent.HEADER_ROW
. addColumn
执行fireTableStructureChanged
:
TableModelEvent.HEADER_ROW
is fired as a result of addColumn()
execution by DefaultTableModel
. addColumn
executes fireTableStructureChanged
:
public void fireTableStructureChanged() {
fireTableChanged(new TableModelEvent(this, TableModelEvent.HEADER_ROW));
}
最终您只能在添加的最后一列上设置首选大小,因为其余的列是由createDefaultColumnsFromModel()
重新创建的.
You end up setting preferred size only on the last column that was added, as the rest of the columns were recreated by createDefaultColumnsFromModel()
.
总而言之,在单独的循环中创建所有列之后,设置首选大小可能更简单.
All in all, it is probably simpler to set preferred sizes after all the columns were created in a separate loop.
这篇关于Java JTable无法设置列宽的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!