Frage

Ich versuche, eine bestimmte Zeile meines jtable zu machen (es sollte eine andere Hintergrundfarbe haben, und es sollte fett haben).

Ich fand einige Fragen in Bezug auf, wie eine benutzerdefinierte TableCellRenderer zu implementieren ( hier und hier ) und die Anleitung Wie zu verwenden Tabellen und diese ( Tabellenzeile Rendering ).

Ich bin mit einem JInternalFrame die JTable anzuzeigen. Ich habe versucht, beiden Lösungen zu implementieren, aber weder getCellRenderer noch prepareRenderer genannt werden. Beim Debuggen kann ich meine neuen jtable Wesen geschaffen, aber, mein Haltepunkt in dem Verfahren nicht genannt.

Ihr Code wie folgt aussieht:

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

Wie Sie sehen können, Modell ist meine Implementierung eines AbstractTableModel.

Natürlich, ich bin etwas fehlt. Ich habe versucht, repaint() zu rufen, um zu sehen, ob etwas passiert ist, aber nichts geschehen.

Ich habe auch versucht eine JPane in meinem JInternalFrame zu setzen und sie fügen Sie die JScrollPane hinein, aber nichts kam es auch.

Jede Hilfe?

TIA,

Bob

War es hilfreich?

Lösung

Wie bereits erwähnt in Konzepte: Editoren und Renderers „ruft die Tabelle der getColumnClass Methode des Tabellenmodell, das den Datentyp der Spalte Zellen erhält.“ Sie sollten sicherstellen, dass Ihre Implementierung von AbstractTableModel einen geeigneten Wert zurückgibt, wie in diesem Beispiel vorgeschlagen.

Nachtrag:

  

Ich versuche, eine Reihe zu machen, nicht eine Spalte.

Rob Camick ist Table Row Rendering Ansatz, Überschreibungen prepareRenderer() scheint 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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top