كيفية تمثيل القيم المزدوجة كدوائر في مصفوفة ثنائية الأبعاد في جافا

StackOverflow https://stackoverflow.com/questions/2833482

سؤال

لذلك أريد أن أكتب مستكشف مصفوفة يمكّنني من إعادة ترتيب الصفوف والأعمدة من المصفوفة. بالنسبة لهذا بوربوس ، استخدمت فئة JTable. الآن المشكلة التي أواجهها هي أنه من الصعب للغاية إعادة ترتيب المصفوفة من خلال النظر إلى القيم المزدوجة ، لذلك أود طباعة المصفوفة ليس بالقيم المزدوجة ولكن مع الدوائر التي يمثل فيها نصف قطر الدائرة القيمة. حتى أتمكن من معرفة الفرق بين القيم الكبيرة والقيم الصغيرة بشكل أسرع.

أي شخص لديه أي فكرة كيف يمكنني تحويل هذه القيم المزدوجة إلى دوائر مملوءة مع JTable أو أي فئة جدول لهذه المسألة؟

هل كانت مفيدة؟

المحلول

إليك مثال على أ العارض المخصص هذا ينفذ Icon واجهة للقيام بالرسم. يسمح هذا النهج بالتحكم الأسهل في وضع النص والرمز النسبي. لاحظ أن المقاييس العارض بناءً على افتراض القيم الطبيعية في الفاصل الزمني [0, 1); ؛ قد ترغب في الاستعلام عن نموذج البيانات الخاص بك للحصول على الحد الأدنى والحد الأقصى للقيم بدلاً من ذلك.

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

نصائح أخرى

سيكون عليك كتابة العرف الخاص بك عارض الخلية.

سيتم استخدام المكون كطابع مطاطي. ال paint الطريقة تسمى لكل خلية.

ارسم الدائرة في طريقة الطلاء ؛

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

سوف يرسم دائرة من radius مع نقطة المركز في (x,y).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top