1

JTable对它的大量信息很陌生,也很困惑。有几个问题希望各位大侠能解答。

  1. 如何单独设置每个单元格值?是通过实现一个TableModel(我不太知道如何使用它)?我知道可以使用 2D 矩阵预先设置数据。
  2. 我怎样才能使下表的标题很好地定位(条目完全显示)?如果您仔细查看表中的第一个条目,作业等级被部分隐藏。我一直在寻找解决这个问题的方法,但无济于事。

http://i45.tinypic.com/24pxvmx.jpg

4

3 回答 3

1

正如我在上面评论的那样,您可以做的最好的事情是通过http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

但是要回答您的两个具体问题:

1) 是的,您需要一个 TableModel。您可以通过传递数组来创建一个新的 JTable,但无论如何它只是在后台创建一个 DefaultTableModel。查找模型-视图-控制器架构以获取有关为什么需要模型的更多信息。

2)您可以使用类似这样的方式在列上设置首选宽度

table.getColumnModel().getColumn(1).setPreferredWidth(100);

这将使第 1 列的首选宽度为 100 像素(我认为它是像素......不过不要引用我的话!)。

于 2012-05-21T10:03:21.117 回答
1

这个概念是您使用自己的类继承 DefaultTableModel。例如,如果您想显示工作表,您可以创建一个名为 JobsTableModel 的类。JobsTableModel 通常会有一个 Job 类型的对象集合,这些对象可能会被传递给构造函数。您的 JobsTableModel 必须能够回答以下问题:

  1. 有多少行
  2. 有多少列
  3. X列的名称是什么
  4. X列的数据类型是什么
  5. 单元格(X,Y)中的值是多少

它通过覆盖以下方法来做到这一点:

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);
于 2012-05-21T10:10:43.860 回答
1

JTable 是 Swing 中最复杂的组件之一。所以需要一些时间来启动它。但是当你掌握它的时候,你会发现 JTable 是非常强大和灵活的。说了这么多,让我试着回答你的问题。

1)如何单独设置每个单元格值?是通过实现一个 TableModel(我不太清楚如何使用它)?我知道可以使用二维矩阵预先设置数据

JTable 对数据使用 TableModel 实例。如果您有可用的数组或带有预加载数据的向量,则可以简单地使用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 此链接中的代码示例使用所有列数据来计算首选列宽。我想它也可以适应您的要求。

于 2012-05-21T10:20:36.467 回答