Как представлять двойные значения как круги в 2D-матрице в Java

StackOverflow https://stackoverflow.com/questions/2833482

Вопрос

Поэтому я хочу написать Matrix Explorer, который позволяет мне переупорядочить строки и колонны матрицы. Для этой вирпузы я использовал класс JTable. Теперь проблема, которую у меня есть, состоит в том, что очень сложно изменить порядок матрицы, глядя на двойные значения, поэтому я хотел бы распечатать матрицу не с двойными значениями, но с кругами, в которых радиус круга представляет значение. Так что я могу сказать разницу между большими значениями и небольшими значениями быстрее.

У кого-нибудь есть идеи, как я могу превратить эти двойные значения в заполненные круги с JTable или любым классом таблицы в этот вопрос?

Это было полезно?

Решение

Вот пример Пользовательский рендерьер это реализует Icon Интерфейс, чтобы сделать рисунок. Этот подход позволяет проще контролировать относительное позиционирование текста и значка. Обратите внимание, что масштабы рендерера, основанные на предположении о нормамизованных значениях в интервале [0, 1); Возможно, вы захотите запросить свою модель данных для минимальных и максимальных значений.

icon renderer

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;
    }
}

Другие советы

Вам придется написать свой обычай Визуализация клеток.

Компонент будет использоваться в качестве штампов; то paint Способ вызывается для каждой ячейки.

Нарисуйте круг в методе краски;

g.fillOval(x - radius / 2, y - radius / 2, radius, radius);

Нарисую круг radius с центральной точкой на (x,y).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top