Question

donc je veux écrire un explorateur de matrice qui me permet de lignes et de colonnes Réorganiser d'une matrice. Pour cette porpouse je la classe JTable. Maintenant, le problème que j'est qu'il est très difficile de modifier l'ordre d'une matrice en regardant les valeurs doubles, donc je voudrais imprimer la matrice pas avec les doubles valeurs, mais avec des cercles dans lesquels le rayon du cercle représente la valeur. Alors que je peux dire la différence entre les grandes valeurs et petites valeurs plus rapidement.

Tout le monde a une idée comment je peux tourner cette double des valeurs dans les cercles remplis de JTable ou d'une classe de table pour cette question?

Était-ce utile?

La solution

Voici un exemple d'un personnalisé renderer qui implémente l'interface Icon pour faire le dessin. Cette approche permet un contrôle plus facile sur le positionnement relatif du texte et de l'icône. Notez que les échelles de renderer basées sur l'hypothèse des valeurs normalisées dans l'intervalle [0, 1); vous pouvez interroger votre modèle de données pour les valeurs minimales et maximales au lieu.

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

Autres conseils

Vous devez écrire votre commande CellRenderer .

Le composant sera utilisé comme un tampon en caoutchouc; la méthode de paint est appelé pour chaque cellule.

Tracer le cercle dans le procédé de peinture;

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

tirerai un cercle de radius avec point central à (x,y).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top