我JTable
对它的大量信息很陌生,也很困惑。有几个问题希望各位大侠能解答。
- 如何单独设置每个单元格值?是通过实现一个
TableModel
(我不太知道如何使用它)?我知道可以使用 2D 矩阵预先设置数据。 - 我怎样才能使下表的标题很好地定位(条目完全显示)?如果您仔细查看表中的第一个条目,作业等级被部分隐藏。我一直在寻找解决这个问题的方法,但无济于事。
我JTable
对它的大量信息很陌生,也很困惑。有几个问题希望各位大侠能解答。
TableModel
(我不太知道如何使用它)?我知道可以使用 2D 矩阵预先设置数据。正如我在上面评论的那样,您可以做的最好的事情是通过http://docs.oracle.com/javase/tutorial/uiswing/components/table.html。
但是要回答您的两个具体问题:
1) 是的,您需要一个 TableModel。您可以通过传递数组来创建一个新的 JTable,但无论如何它只是在后台创建一个 DefaultTableModel。查找模型-视图-控制器架构以获取有关为什么需要模型的更多信息。
2)您可以使用类似这样的方式在列上设置首选宽度
table.getColumnModel().getColumn(1).setPreferredWidth(100);
这将使第 1 列的首选宽度为 100 像素(我认为它是像素......不过不要引用我的话!)。
这个概念是您使用自己的类继承 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);
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 此链接中的代码示例使用所有列数据来计算首选列宽。我想它也可以适应您的要求。