Question

Je suis en train de rendre une ligne spécifique de mon jtable (il devrait avoir une couleur de fond différente et il devrait avoir des caractères gras).

J'ai trouvé plusieurs questions sur la façon de mettre en œuvre un TableCellRenderer personnalisé ( ici et ici ) et le tutoriel Comment utiliser les tables et celui-ci ( ligne du tableau de rendu ).

J'utilise un JInternalFrame pour afficher la JTable. J'ai essayé de mettre en œuvre les deux solutions mais ni getCellRenderer ni prepareRenderer sont appelés. Lors du débogage, je peux voir mon nouvel être jtable créé, mais mon point d'arrêt à l'intérieur des méthodes ne sont pas appelés.

Mon apparence de code comme:

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

Comme vous pouvez le voir, le modèle est ma mise en œuvre d'un AbstractTableModel.

Bien sûr que je manque quelque chose. J'ai essayé d'appeler repaint() pour voir si quelque chose est arrivé, mais rien ne se passait.

J'ai aussi essayé de mettre un JPane dans mon JInternalFrame et ajoutez-le dans JScrollPane, mais rien ne se passait aussi.

Toute aide?

TIA,

Bob

Était-ce utile?

La solution

Comme indiqué dans Concepts: Les éditeurs et les équarrisseurs , « la table invoque la méthode getColumnClass du modèle de table, qui obtient le type de données des cellules de la colonne. » Vous devez vérifier que votre implémentation de AbstractTableModel retourne une valeur appropriée, comme l'a suggéré dans cette exemple .

Addendum:

  

Je suis en train de rendre une ligne, pas une colonne.

Rob Camick est Tableau ligne Rendu approche qui outrepasse prepareRenderer() semble à propos.

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top