Frage

so möchte ich eine Matrix-Explorer schreiben, die mir einer Matrix Neuordnungs Zeilen und Spalten ermöglicht. Aus diesem porpouse verwendete ich die Klasse JTable. Nun ist das Problem, dass ich habe, ist, dass es sehr schwierig ist, eine Matrix, indem man doppelte Werte neu zu ordnen, so würde Ich mag die Matrix drucken nicht mit den doppelten Werten, aber mit Kreisen, in denen der Radius des Kreises, den Wert darstellt. So dass ich den Unterschied zwischen großen Werten sagen kann und kleine Werte schneller.

Wer hat eine Idee, wie ich diese doppelten Werte in gefüllten Kreise mit JTable drehen kann, oder jede Tabellenklasse für diese Angelegenheit?

War es hilfreich?

Lösung

Hier ist ein Beispiel für einen benutzerdefinierten Renderer , dass Geräte die Icon Schnittstelle, um die Zeichnung zu tun. Dieser Ansatz ermöglicht eine einfachere Kontrolle über die relative Positionierung des Textes und Symbol. Beachten Sie, dass die Renderer Skalen basierend auf der Annahme von normalisierten Werten im Intervall [0, 1); Sie können stattdessen Ihr Datenmodell für die Minimal- und Maximalwerte abzufragen.

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

Andere Tipps

In Kürze erhalten Sie haben Ihre individuelle schreiben Cellrenderer .

Die Komponente wird als ein Stempel verwendet werden; die paint Methode wird für jede Zelle genannt.

Zeichnen Sie den Kreis in der paint-Methode;

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

Wird ein Kreis von radius mit Mittelpunkt bei (x,y) ziehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top