java - 具有不同行类型的 JTable

标签 java swing jtable tablecellrenderer tablecelleditor

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

这是一个例子:

enter image description here

所以基本上成本是这样计算的:

销售额 * 产量 * 产量% = 成本

我完全不确定的是:如何为 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;
    }

对于如何实现此用例有什么建议吗?

感谢您的回答!

最佳答案

如果您希望一行中的单元格具有特殊的格式或数据类型,只需执行您为 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() 中的行和列并相应地应用格式。

关于java - 具有不同行类型的 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26848347/

相关文章:

java - Spring 按名称构造函数参数 Autowiring

java - Android WebView仅显示在半屏上

java - 单击以编辑 JTable 单元格

java - 3D 空间中的轴对齐边界框和三角形碰撞

java - 服务器及其 keystore Trustores 之间的 TLS 身份验证

java - 如何获取 JScrollPane 中的组件

Java组件对齐到左上角

java - JPanel重绘问题

java - 枚举的表格单元渲染器

java - JTable 的 setSelectedRow() 在哪里?