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?

¿Fue útil?

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.

icono de render

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top