2009-09-28 16 views

Répondre

1

Définissez le moteur de rendu personnalisé dans l'en-tête du tableau. Si la colonne actuelle est sélectionnée, mettez la police en gras.

JTable table = new JTable() 
table.getTableHeader().setDefaultRenderer(new MyRenderer()); 

class MyRenderer implements TableCellRenderer { 
    //todo implement 
} 
+0

Je ne sais pas pourquoi mais ce n'est pas respecté par mon apparence. Je peux changer le premier plan mais il est impossible de changer le texte. –

+0

C'est un moteur de rendu CELL. Il n'y a pas de vrai moteur de rendu TableHeader. Voir mon commentaire ci-dessous. –

+0

L'en-tête du tableau utilise sun.swing.table.DefaultTableCellHeaderRenderer pour rendre chaque colonne dans la ligne d'en-tête. Malheureusement, le soleil. ** est privé paquet SUN. Vous aurez besoin de faire plus de peinture comme d'habitude pour rencontrer LaF. –

-1

Il est partiellement possible. Ce que vous avez à faire est d'écrire votre modèle de telle manière que sur la sélection de cellule de votre modèle, la méthode fireTableStructureChanges est exécutée (en supposant que vous utilisez AbstractTableModel comme base). Cela va repeindre toute la table, y compris l'en-tête de la colonne. Tout ce que vous avez à faire est de conserver l'état de la colonne sélectionnée.

Au début, j'ai dit "partiellement" possible. En effet, l'appel de fireTableStructureChanges revalidera la totalité de la table et vous perdrez l'état de votre modèle de colonne actuel, à savoir la largeur et la séquence des colonnes.

Pour votre texte en gras, vous pouvez utiliser HTML - quelque chose comme <html><b>your text</b></html>, mais il doit changer de façon dynamique en fonction de votre état interne du modèle

MISE À JOUR: aussi le texte d'en-tête de table colonne peut être réglée directement, mais le changement de modèle ou tableStructureChanged événement fera la table à relire du modèle.

+0

Cette solution n'est pas correcte. Vous mélangez le modèle et l'interface utilisateur ensemble. –

+0

Pas nécessairement. Comme les noms de colonnes sont renvoyés par le modèle, ils font partie du modèle. Le modèle doit juste réagir au changement de sélection d'une manière ou d'une autre. Expliquez à votre solution que les freins s'affichent bien parce que vous utilisez un rendu de cellules pour l'en-tête du moteur de rendu. Et pour autant que je sache, il est maintenant possible de vraiment répliquer le rendu d'en-tête par défaut. –

Questions connexes