سؤال

أحاول تقديم صف معين من JTable الخاص بي (يجب أن يكون له لون خلفية مختلف ويجب أن يكون له أحرف جريئة).

لقد وجدت العديد من الأسئلة المتعلقة بكيفية تنفيذ العرف TableCellRenderer (هنا و هنا) والبرنامج التعليمي كيفية استخدام الجداول و هذه (عرض صف الجدول).

أنا أستخدم A. JInternalFrame لعرض JTable. حاولت تنفيذ كلا الحلين ولكن لا getCellRenderer ولا prepareRenderer يتم استدعاؤها. عند تصحيح الأخطاء ، أستطيع أن أرى أن Jtable الجديد يتم إنشاؤه ، لكن نقطة التوقف داخل الأساليب لا تسمى.

رمز بلدي يشبه:

this.add(createData(model));

private JComponent createData(ProfitLossTableModel model) {
    JTable table = new JTable(model) {

        public TableCellRenderer getCellRenderer(int row, int column) {
            if ((row == 0) && (column == 0)) {
                DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
                renderer.setHorizontalAlignment(JLabel.RIGHT);
                renderer.setBackground(Color.red);
                return renderer;
            } else {
                return super.getCellRenderer(row, column);
            }
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(0, 0, false, false);
    table.setAutoCreateRowSorter(true);
    return new JScrollPane(table);
}

كما ترون ، النموذج هو تنفيذ بلدي AbstractTableModel.

بالطبع أنني أفتقد شيئًا. حاولت الاتصال repaint() لمعرفة ما إذا كان هناك شيء ما ، ولكن لم يحدث شيء.

حاولت أيضًا وضع JPane داخل JinternalFrame الخاص بي وإضافة Jscrollpane فيه ، ولكن لم يحدث شيء أيضًا.

أي مساعدة؟

تيا ،

بوب

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

المحلول

كما نوقش في المفاهيم: المحررين والعارضين, ، "الجدول يستدعي طراز الجدول getColumnClass الطريقة ، التي تحصل على نوع بيانات خلايا العمود. "يجب عليك التحقق من أن تنفيذك AbstractTableModel إرجاع قيمة مناسبة ، كما هو مقترح في هذا مثال.

إضافة:

أحاول إجراء صف وليس عمودًا.

روب كاميك عرض صف الجدول النهج الذي يتجاوز prepareRenderer() يبدو apropos.

tabbedPane.addTab("FirstRow", createFirstRow(model));
...
private JComponent createFirstRow(DefaultTableModel model) {

    final Font font = new Font("Serif", Font.BOLD, 14);

    JTable table = new JTable(model) {

        public Component prepareRenderer(
                TableCellRenderer renderer, int row, int column) {
            Component c = super.prepareRenderer(renderer, row, column);
            if (!isRowSelected(row)) {
                c.setBackground(row == 0 ? Color.yellow: getBackground());
                c.setFont(row == 0 ? font : getFont());
            }
            return c;
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(1, 1, false, false);
    return new JScrollPane(table);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top