Cómo representar valores dobles como círculos en un 2d matriz en java
-
26-09-2019 - |
Pregunta
lo que quiere escribir un explorador de matriz que me permite a las filas y columnas de una matriz de reabastecimiento. Por esta porpouse utilicé la clase JTable. Ahora el problema que tengo es que es muy difícil de cambiar el orden de una matriz examinado los valores dobles, así que me gustaría para imprimir la matriz no con los valores de dobles, pero con los círculos en los que el radio del círculo representa el valor. Así que puedo decir la diferencia entre los valores grandes y pequeños valores más rápidos.
¿Alguien tiene alguna idea de cómo puedo convertir esta doble valores en círculos rellenos con JTable o cualquier clase de tabla para el caso?
Solución
Este es un ejemplo de un intérprete personalizado que implementa la interfaz Icon
para hacer el dibujo. Este enfoque permite un control más fácil sobre el posicionamiento relativo del texto y el icono. Obsérvese que las escalas renderer basan en el supuesto de valores normalizados en el [0, 1)
intervalo; es posible que desee consultar el modelo de datos para los valores mínimo y máximo en su lugar.
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;
}
}
Otros consejos
tendrá que escribir su costumbre celular Procesador .
El componente se utilizará como un sello de goma; el método paint
se llama para cada célula.
dibujar el círculo en el método de pintura;
g.fillOval(x - radius / 2, y - radius / 2, radius, radius);
dibujará un círculo de radius
con punto central en (x,y)
.