JTable帮助(调整标头和数据源的大小)

时间:2012-05-21 09:54:19

标签: java swing jtable

我对JTable很陌生,并对其中的大量信息感到困惑。我希望你能回答几个问题。

  1. 如何单独设置每个单元格值?是通过实现TableModel(我不知道如何使用它)?据我所知,可以使用2D矩阵预先设置数据。
  2. 如何才能使下面的表头很好地定位(条目完全显示)?如果仔细查看表格中的第一个条目,则部分隐藏作业等级。为了解决这个问题,我一直在搜索高低,但无济于事。
  3. http://i45.tinypic.com/24pxvmx.jpg

3 个答案:

答案 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必须能够提供以下问题的答案:

  1. 有多少行
  2. 有多少列
  3. 第X列的名称
  4. 第X列的数据类型是什么
  5. 单元格(X,Y)中的值是什么
  6. 它通过覆盖以下方法来实现:

    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 此链接中的代码示例使用所有列数据来计算首选列宽。我想它也可以根据您的要求进行调整。