如何在Java 2D矩阵中将双精度值表示为圆形

发布于 2021-01-30 16:23:18

所以我想写一个矩阵浏览器,使我能够重新排序矩阵的行和列。对于这个海豚,我使用了Jtable类。现在我遇到的问题是,通过查看双精度值很难对矩阵进行重新排序,因此我想打印的矩阵不是带双精度值,而是带圆圈的圆,其中圆的半径代表该值。这样我就可以更快地分辨出大值和小值之间的区别。

有人知道如何使用JTable或任何表类将此双精度值转换为实心圆吗?

关注者
0
被浏览
257
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    这是一个自定义渲染器的示例,该渲染器实现了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;
        }
    }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看