我生成一个热图,使用Jtable并用数字填充,然后用颜色 。我想显示圆圈或其他图形图像,而不是颜色,它们的大小相对应,如。 我在R中找到了一个库来做它,geom_tile,但是找不到在Javs中做到这一点的任何方法。你们有什么想法或例子来说明如何去做?如何在java中绘制热图,显示圆圈而不是颜色
0
A
回答
1
要绘制自定义表格单元格,您需要提供自己的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);
}
}
}
上述代码应生成类似于以下截图的表:
通过使用不仅仅是更复杂的对象的Integer
为你的细胞,你可以实现更复杂的仁德RERS。例如,如果您有一个简单的数据类class MyData { int value1; int value2; }
并将这些值插入表中,则可以实现一个渲染器,该渲染器根据单元格值设置依赖于value1
的背景色和基于value2
的点大小。将value3
添加到该类将进一步允许根据这些值对点进行着色,并非常接近您的示例图像。
相关问题
- 1. 如何在圆圈上绘制图像
- 2. 如何在JPanel上用Java绘制彩色圆圈?
- 3. 具有不同颜色边框的Android绘制圆圈
- 4. 如何在cocos2dx中绘制圆圈
- 5. 在android中绘制圆圈
- 6. 在MATLAB中绘制圆圈
- 7. PhpStorm显示红色圆圈
- 8. 如何在iOS中用自定义数量填充颜色来绘制圆圈?
- 9. 圆圈图层不显示在OpenLayers 3
- 10. 如何绘制一个圆圈,其中颜色会随着时间变化android
- 11. 无法在位图上绘制圆圈?
- 12. 如何让Sublime Text控制台显示颜色而不是颜色代码
- 13. 在圆圈中间改变颜色
- 14. Java小程序不显示圆圈
- 15. OpenGL绘制椭圆而不是圆形
- 16. 如何在iphone sdk中使用图形绘制虚线圆圈?
- 17. 如何在桌面视图中绘制线条,圆圈
- 18. 在屏幕上绘制而不显示颜色,并保存图像
- 19. 在绘制热图中使用离散自定义颜色
- 20. 为什么在MATLAB中绘制的圆圈显示为椭圆形?
- 21. 如何用x标记绘制圆圈?
- 22. 如何在XNA中绘制具有特定颜色的圆?
- 23. 如何在Google地图中绘制圆圈之前离开模式绘图
- 24. 在XNA中绘制简单的圆圈
- 25. 绘制圆圈并存储在UIImage中
- 26. 在iPhone中帮助绘制圆圈
- 27. 在openGL中用Android绘制圆圈
- 28. 在directx中绘制一个圆圈9
- 29. 绘制圆圈Google静态地图
- 30. 如何在我的Java绘画程序中绘制直线,矩形和圆圈?
https://stackoverflow.com/questions/4941372/how-to-insert-image-into-jtable-cell – assylias