所以我想编写一个矩阵资源管理器,它使我能够重新排列矩阵的行和列。对于这个 porpouse,我使用了 Jtable 类。现在我遇到的问题是,通过查看双精度值来重新排序矩阵非常困难,所以我想打印矩阵不是使用双精度值,而是使用圆的半径表示值的圆。这样我就可以更快地分辨出大值和小值之间的区别。
任何人都知道如何将这个双精度值变成带有 JTable 或任何表类的实心圆圈?
所以我想编写一个矩阵资源管理器,它使我能够重新排列矩阵的行和列。对于这个 porpouse,我使用了 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;
}
}
您将不得不编写您的自定义Cell Renderer。
该组件将用作橡皮图章;paint
为每个单元格调用该方法。
用paint方法画圆;
g.fillOval(x - radius / 2, y - radius / 2, radius, radius);
将画一个圆,radius
中心点位于(x,y)
。