Как представлять двойные значения как круги в 2D-матрице в Java
-
26-09-2019 - |
Вопрос
Поэтому я хочу написать Matrix Explorer, который позволяет мне переупорядочить строки и колонны матрицы. Для этой вирпузы я использовал класс 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;
}
}
Другие советы
Вам придется написать свой обычай Визуализация клеток.
Компонент будет использоваться в качестве штампов; то paint
Способ вызывается для каждой ячейки.
Нарисуйте круг в методе краски;
g.fillOval(x - radius / 2, y - radius / 2, radius, radius);
Нарисую круг radius
с центральной точкой на (x,y)
.