Java红热图_如何在java中绘制热图,显示圆圈而不是颜色

要绘制自定义表格单元格,您需要提供自己的TableCellRenderer实现。

您的自定义TableCellRenderer只能实现一个方法:getTableCellRendererComponent,它必须返回Component或JComponent。

然后,您的TableCellRenderer可以返回一个自定义的JComponent,它根据预先设置的单元格值绘制圆。

在下面有一个样本代码演示设置自定义HeatmapCellRenderer,其使用DotRenderer作为组分以使单个细胞:

public class TableHeatmap {

public static void main(String[] args) {

JFrame frame = new JFrame();

// create a demo table 10 x 10 cells

JTable table = new JTable(10, 10);

frame.setContentPane(table);

// fill in some random data

for (int row = 0; row < 10; row++) {

for (int col = 0; col < 10; col++) {

table.setValueAt((int) (Math.random() * 10), row, col);

}

}

// set our custom TableCellRenderer

table.setDefaultRenderer(Object.class, new HeatmapCellRenderer());

table.setRowHeight(30);

// show the window

frame.pack();

frame.setVisible(true);

}

private static class HeatmapCellRenderer implements TableCellRenderer {

private final DotRenderer renderer = new DotRenderer();

@Override

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

if (value instanceof Integer) {

this.renderer.setValue((Integer) value);

return this.renderer;

}

return null;

}

}

private static class DotRenderer extends JComponent {

private int value;

public void setValue(int value) {

this.value = value;

}

@Override

protected void paintComponent(Graphics g) {

g.setColor(Color.BLUE);

g.fillRect(0, 0, this.getWidth(), this.getHeight());

g.setColor(Color.RED);

int centerX = this.getWidth()/2;

int centerY = this.getHeight()/2;

g.fillOval(centerX - this.value, centerY - this.value, this.value * 2, this.value * 2);

}

}

}

上述代码应生成类似于以下截图的表:

Bf5Fm.png

通过使用不仅仅是更复杂的对象的Integer为你的细胞,你可以实现更复杂的仁德RERS。例如,如果您有一个简单的数据类class MyData { int value1; int value2; }并将这些值插入表中,则可以实现一个渲染器,该渲染器根据单元格值设置依赖于value1的背景色和基于value2的点大小。将value3添加到该类将进一步允许根据这些值对点进行着色,并非常接近您的示例图像。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值