所以我想写一个矩阵浏览器,使我能够重新排序矩阵的行和列。对于这个海豚,我使用了Jtable类。现在我遇到的问题是,通过查看双精度值很难对矩阵进行重新排序,因此我想打印的矩阵不是带双精度值,而是带圆圈的圆,其中圆的半径代表该值。这样我就可以更快地分辨出大值和小值之间的区别。
有人知道如何使用JTable或任何表类将此双精度值转换为实心圆吗?
这是一个自定义渲染器的示例,该渲染器实现了Icon界面以进行绘制。这种方法可以更轻松地控制文本和图标的相对位置。请注意,渲染器根据间隔中归一化值的假设进行缩放[0, 1);您可能想查询数据模型的最小值和最大值。
class DecRenderer extends DefaultTableCellRenderer implements Icon { private static final int SIZE = 32; private static final int HALF = SIZE / 2; DecimalFormat df; public DecRenderer(DecimalFormat df) { this.df = df; this.setIcon(this); this.setHorizontalAlignment(JLabel.RIGHT); this.setBackground(Color.lightGray); } @Override protected void setValue(Object value) { setText((value == null) ? "" : df.format(value)); } @Override public void paintIcon(Component c, Graphics g, int x, int y) { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(Color.blue); double v = Double.valueOf(this.getText()); int d = (int)(v * SIZE); int r = d / 2; g2d.fillOval(x + HALF - r, y + HALF - r, d, d); } @Override public int getIconWidth() { return SIZE; } @Override public int getIconHeight() { return SIZE; } }