我对JTable
很陌生,并对其中的大量信息感到困惑。我希望你能回答几个问题。
TableModel
(我不知道如何使用它)?据我所知,可以使用2D矩阵预先设置数据。答案 0 :(得分:1)
正如我上面评论过的,你能做的最好的事情就是通过http://docs.oracle.com/javase/tutorial/uiswing/components/table.html。
但要回答你的两个具体问题:
1)是的,你需要一个TableModel。你可以通过传递它来创建一个新的JTable,但它只是在后台创建一个DefaultTableModel。查看模型 - 视图 - 控制器架构,了解有关您需要该模型的原因的更多信息。
2)您可以使用类似
的内容在列上设置首选宽度table.getColumnModel().getColumn(1).setPreferredWidth(100);
这将为第1列提供100像素的首选宽度(我认为这是像素......不过不引用我的内容!)。
答案 1 :(得分:1)
概念是您使用自己的类继承DefaultTableModel。例如,如果要显示作业表,可以创建一个名为JobsTableModel的类。 JobsTableModel通常具有Job类型的对象集合,可以将其传递给构造函数。您的JobsTableModel必须能够提供以下问题的答案:
它通过覆盖以下方法来实现:
public int getRowCount()
public int getColumnCount()
public String getColumnName(int columnIndex)
public Class<?> getColumnClass(int columnIndex)
public Object getValueAt(int rowIndex, int columnIndex)
然后,JTable实现可以使用此信息填充表,而无需担心在每个单元格中设置值。此外,JTable实现将自动为您提供免费的排序和列重新排序。如果你必须直接填充每个单元格,这将是一个噩梦。
关于获得正确的宽度,我不相信有任何自动方式,你只需要使用一些试验和错误。您可以按如下方式设置列宽(以像素为单位):
TableColumn column = table.getColumnModel().getColumn(i);
column.setPreferredWidth(width);
答案 2 :(得分:1)
JTable是Swing最复杂的组件之一。所以需要一些时间才能开始。但是当你掌握它时,你会发现JTable非常强大和灵活。话虽如此,让我试着回答你的问题。
1)如何单独设置每个单元格值?是通过 执行一个TableModel(我不太清楚如何使用这个)?一世 了解可以使用2D矩阵预先设置数据
JTable使用TableModel实例作为数据。如果您有可用的数组或带有预加载数据的Vector,则只需使用DefaultTableModel即可。如果DefaultTableModel不够灵活,无法满足您的要求,那么请不要犹豫,通过扩展AbstractTableModel来实现您的TableModel。 AbstractTableModel只有以下三种抽象方法,因此通过扩展AbstractTableModel实现具体的TableModel非常容易。 :
public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);
2)我怎样才能使下表的标题很好 定位(条目完全显示)?如果你仔细看 表中的第一个条目,部分隐藏了作业等级。我有 搜索高低寻求解决方案,但无济于事。 http://i45.tinypic.com/24pxvmx.jpg
您可以在此处找到自动设置列宽的示例:http://www.exampledepot.com/egs/javax.swing.table/PackCol.html 此链接中的代码示例使用所有列数据来计算首选列宽。我想它也可以根据您的要求进行调整。