Java 如何隐藏DefaultTableModel中的特殊列,使其不显示在表中?
我正在使用JavaSwingx框架。我的Java 如何隐藏DefaultTableModel中的特殊列,使其不显示在表中?,java,swing,jtable,swingx,defaulttablemodel,Java,Swing,Jtable,Swingx,Defaulttablemodel,我正在使用JavaSwingx框架。我的DefaultTableModel对象中有4列。我只想显示其中的3列。但是,我需要这四个来进行计算 实际数据模型 S.No.|ID | GDC ID |说明 我想在表中显示的内容 S.No.| GDC ID |声明 是否可以在渲染中仅隐藏或忽略一列?请引导我。您可以通过将其宽度设置为0来隐藏它 _table.getColumn("ID").setPreferredWidth(0); _table.getColumn("ID").setMinWidth(0)
DefaultTableModel
对象中有4列。我只想显示其中的3列。但是,我需要这四个来进行计算
实际数据模型
S.No.|ID | GDC ID |说明
我想在表中显示的内容
S.No.| GDC ID |声明
是否可以在渲染中仅隐藏或忽略一列?请引导我。您可以通过将其宽度设置为0来隐藏它
_table.getColumn("ID").setPreferredWidth(0);
_table.getColumn("ID").setMinWidth(0);
_table.getColumn("ID").setWidth(0);
_table.getColumn("ID").setMaxWidth(0);
您可以操作getValueAt、getColumnCount来实现这一点 例如,你给它的getColumnCount是3 和在getValueAt上-如果列索引位于跳过的列之上,则跳过 JTable将首先调用getColumnCount和getRowCount,并为每个单元格获取调用getValueAt的值 注意:忽略此链接,请参阅下面垃圾神的链接。
- 默认情况下,最小尺寸为
widt10像素
- ,可以隐藏和显示任何列
- 无需调整您的模型,也无需尝试使该列非常小
JTable
内置了以下功能:方法。正如该方法的javadoc中所述
从此JTable的列数组中删除一个列。注意:此方法不会从模型中删除数据列;它只是删除负责显示它的TableColumn
还应注意以下方法的存在:
由于视图中的列顺序和列计数(表
JTable
)可能与模型中的列顺序和列计数不同,因此您需要使用这些方法在视图和模型之间切换
myTableModel = new DefaultTableModel();
myTableModel.setColumnIdentifiers(new Object[]{"S.No.", "ID", "GDC ID", "Decsription"});
JTable myTable = new JTable(myTableModel);
// remember to save the references
TableColumn myTableColumn0 = guiLoteryNumbersTable.getColumnModel().getColumn(0);
TableColumn myTableColumn1 = guiLoteryNumbersTable.getColumnModel().getColumn(1);
TableColumn myTableColumn2 = guiLoteryNumbersTable.getColumnModel().getColumn(2);
TableColumn myTableColumn3 = guiLoteryNumbersTable.getColumnModel().getColumn(3);
myTable.getColumnModel().removeColumn(myTableColumn1);
然后再次显示保持顺序的列:
// 1- remove all the existent columns
myTable.getColumnModel().removeColumn(myTableColumn0);
myTable.getColumnModel().removeColumn(myTableColumn2);
myTable.getColumnModel().removeColumn(myTableColumn3);
// 2- add all the columns again in the right order
myTable.getColumnModel().addColumn(myTableColumn0);
myTable.getColumnModel().addColumn(myTableColumn1);
myTable.getColumnModel().addColumn(myTableColumn2);
myTable.getColumnModel().addColumn(myTableColumn3);
很抱歉,这是我所知道的最好的方法。没错,
JTable
视图只显示TableModel
提供的内容;另请参见此。您不应为此触摸/更改表格模型,因为JTable
内置了此功能。请参阅我的答案或@trashgood链接。如果你想修改模型,我建议使用decorator@Robin-同意-我认为这是一个更好的解决方案。@罗宾:是的,我忽略了DefaultTableModel
的使用。在这种情况下,你和mKorbel的回答可能会更容易。我通常在AbstractTableModel
的子类中使用Sid的方法。根据使用情况,没有头脑的人可能还想考虑这个选项。有一个内置的功能来“隐藏”视图中的一个列,这是最好的。