如何在java中的2d矩阵中将double值表示为圆圈

woo*_*roo 4 java swing information-visualization

所以我想编写一个矩阵浏览器,它可以让我重新排序矩阵的行和列.对于这个porpouse,我使用了Jtable类.现在我遇到的问题是,通过查看双值来重新排序矩阵是非常困难的,所以我想打印矩阵而不是双值,而是用圆圈表示圆的半径代表值.这样我就能更快地分辨出大值和小值之间的区别.

任何人都知道我怎么能用JTable或任何表类将这个双值转换成实心圆?

tra*_*god 11

以下是实现绘图界面的自定义渲染器示例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;
    }
}
Run Code Online (Sandbox Code Playgroud)