Domanda

quindi voglio scrivere un esploratore matrice che mi permette di righe e colonne di una matrice di riordino. Per questo FINALITÀ ho usato la classe JTable. Ora il problema che ho è che è molto difficile riordinare una matrice cercando in valori doppi, quindi vorrei stampare la matrice non con i valori doppi ma con cerchi in cui il raggio del cerchio rappresenta il valore. In modo che io posso dire la differenza tra grandi e piccoli valori valori più rapidi.

Qualcuno ha qualche idea di come posso trasformare questa doppia valori in cerchi pieni con JTable o qualsiasi classe tavolo per quella materia?

È stato utile?

Soluzione

Ecco un esempio di un renderer personalizzato che implementa l'interfaccia Icon a fare il disegno. Questo approccio consente di controllare più facilmente il posizionamento relativo del testo e l'icona. Notare che le scale di rendering basati sull'ipotesi di valori normalizzati nel [0, 1) intervallo; si consiglia di interrogare il modello di dati per i valori minimi e massimi, invece.

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

Altri suggerimenti

Si dovrà scrivere la vostra abitudine cellulare renderer .

Il componente sarà utilizzato come un timbro di gomma; il metodo paint viene chiamato per ogni cella.

Disegna il cerchio nel metodo paint;

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

Sarà disegnare un cerchio di radius con punto centrale a (x,y).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top