- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,我一直在使用 javax swing,我遇到了一个奇怪的问题,让我质疑。例如,我可以:
JTable table = new JTable();
// Indeed, 2 different objects:
// The TableModel (which, i think is supposed to contain rows and columns?
DefaultTableModel dtm = (DefaultTableModel) table.getModel();
// And the column model, supposed to define the columns of a table?
TableColumnModel tcm = table.getColumnModel();
// I can add columns to my table in two different manners
dtm.addColumn("A Column");
// or
TableColumn column = new TableColumn();
column.setHeaderValue("Another column");
column.setWidth(120);
column.setMinWidth(120);
column.setMaxWidth(120);
tcm.addColumn(column);
// And notice that both commands will add a column in the table
// So our table model should now have 2 columns.
// But does it?
System.out.println(dtm.getColumnCount()); // outputs 1;
System.out.println(tcm.getColumnCount()); // outputs 2;
System.out.println(table.getColumnCount()); // outputs 2;
// The visual shows 2 columns, but the model has only 1.
据我所知,JTable 使用 tableColumnModel 并且 tableColumnModel 将所有列添加到 tableModel 中,但是,当我将列添加到 TableModel 时,它会添加到表中,但 tableModel 仍然过时。
现在,问题是:通过 columnModel 添加一列真的很有趣,因为我可以在那里定义大小、布局、可编辑选项,但是通过这种方式我无法从 tableModel 添加任何数据,因为该列没有' 出现在 tableModel 上。对此有什么想法吗?
最佳答案
TableModel
用于包含数据。可以按行/列访问数据。
JTable 使用TableColumnModel
来控制数据的View
。也就是说,它控制在 JTable 中显示的列。您还可以对列重新排序,以不同的顺序显示数据。
...but in this way I cannot add any data to it from the tableModel, since that column doesn't appear on the tableModel
没错。 TableColumnModel 的目的是简单地自定义 View ,而不是操作数据。
也许您的应用程序包含许多数据列,但对特定列的访问受到“安全级别”的限制。在这种情况下,数据始终存储在 TableModel 中,但您需要更改 View 以控制哪些数据列可见。因此,您可以从 TableColumnModel 中删除/添加列。
当您向 TableModel 添加一列时,JTable 会收到通知并为您重新创建所有 TableColumns。这可能是好事也可能是坏事,因为当重新创建 TableColumnModel 时,您将丢失您可能已添加到 TableColumn 的任何自定义呈现器和编辑器。您可以使用以下方法防止这种情况发生:
table.setAutoCreateColumnsFromModel( false );
现在 TableColumnModel 不会更新,您有责任手动创建 TableColumn 并将其添加到 TableColumnModel。
但一般来说你:
关于Javax Swing JTable::getModel 与 JTable::getColumnModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29393041/
本文整理了Java中com.tc.admin.common.XObjectTable.getColumnModel()方法的一些代码示例,展示了XObjectTable.getColumnModel(
你好,我一直在使用 javax swing,我遇到了一个奇怪的问题,让我质疑。例如,我可以: JTable table = new JTable(); // Indeed, 2 different o
我是一名优秀的程序员,十分优秀!