具有不同行类型的JTable

时间:2014-11-10 16:27:43

标签: java swing jtable tablecellrenderer tablecelleditor

我想在我的程序中实现一个JTable,它有多种类型的不同行。

以下是一个例子:

enter image description here

所以基本上costs计算如下:

Sale * Production * Production % = Costs

我完全不确定的是:如何为JTable模型中的每一行提供一个新的“类型”列。目前我正在使用JTable模型:

public Object getValueAt(int row, int col) {
        Customer cd = customerList.get(row);
        switch (col) {
        case 0:
            return cd.getName();
        case 1:
            return cd.getAge(); 
        case 2:
            return cd.getPhone(); 
        default:
            break;
        }

        return null;
    }

有关如何实现此用例的任何建议吗?

感谢您的回答!

1 个答案:

答案 0 :(得分:1)

如果您希望连续的单元格具有特殊的格式或数据类型,只需执行您为Customer所做的操作,只需切换列和行,即我假设表中的一个条目由单个列表示

因此,只需做这样的事情:

Report report = reports.get(col - 1); //made those names up but you should get the idea
switch (row) {
  ...
  case 5:
    double p = report.getPercentage(); //assuming 10% is stored as 0.1
    return String.format("%.0f%%", p * 100); //%.0f means a floating point number with 0 fraction digits
  ...
}

或者(例如,如果您的模型需要更灵活,或者您只有一堆值,例如作为2D数组),则在具有行,列或者行的地图中存储类型(即如何显示值)单元格(行和列)索引为键。

<强>更新

正如mKorbel在评论中所说,你最好让渲染器进行格式化。但问题是,您不能每行注册渲染器,因此您必须提出另一种解决方案。

现在其中两个突然出现在我的脑海中:

  1. 子类JTable以覆盖getCellRenderer(row, col),以便为需要它的行提供PercentageCellRenderer。您必须配置哪一行,例如在表格模型中。

  2. 提供标准单元格渲染器,用于检查getTableCellRendererComponent()中的行和列,并相应地应用格式。