質問

私は行列の再発注行と列に私を可能に行列エクスプローラを書きたいので。 このporpouseために私はJTableのクラスを使用していました。今私が持っている問題は、私がいない二重の値ではなく、円の半径は値を表している円で行列を印刷したいと思いますので、二重の値を見ることで、行列の順序を変更することは非常に困難であるということです。だから私は、大きな値や小さな値より速いとの違いを見分けることができます。

誰もが私はJTableのか、そのことについては任意のテーブルクラスと黒丸の中に、この二重の値を変えることができますどのように任意のアイデアを持っている?

役に立ちましたか?

解決

ここカスタムレンダラの例を示します。 A>実装Iconインタフェースは、描画を行うこと。このアプローチは、テキストとアイコンの相対位置の上に容易に制御することを可能にします。レンダラスケールは間隔[0, 1)における正規化された値の仮定に基づいていることに注意してください。あなたの代わりに最小値と最大値のためのデータモデルを照会することがあります。

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

他のヒント

あなたはあなたのカスタムセルレンダラーに記述する必要がありますます。

成分は、ゴムスタンプとして使用されます。 paint方法は、セルごとに呼び出されます。

ペイント方法で円を描く;

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

radiusで中心点と(x,y)の円を描画します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top