Je crée une application pour une facilité de facturation. Je veux que la colonne montant s'affiche avec l'alignement correct. Comment définir le bon alignement pour une colonne JTable?Définir l'alignement à droite dans la colonne JTable
Répondre
Voir Concepts: Editors and Renderers, en indiquant "Number
- rendu par un libellé aligné à droite". Ayez juste votre TableModel
pour retourner la bonne classe. Comme un exemple concret, notez que Integer
est un Number
, tout en examinant la mise en œuvre de getColumnClass()
dans ce example.
Vous devrez obtenir DefaultTableCellRenderer pour les cellules du tableau et appeler setHorizontalAlignment (alignement).
Exemple se trouve sur les liens:
http://www.techrepublic.com/article/how-to-justify-data-in-a-jtable-cell/5032692/
http://www.coderanch.com/t/337549/GUI/java/align-data-columns-JTable
+1 Je suis un peu méfiant des articles qui mal orthographient 'JTable', mais la barre latérale montre un exemple complet. :-) – trashgod
classe RightTableCellRenderer extends DefaultTableCellRenderer { protected RightTableCellRenderer() { setHorizontalAlignment (JLabel.RIGHT); } J'ai ajouté ce code, après quoi comment puis-je définir le moteur de rendu à ma colonne jtable. } – Arivu2020
Essayez ceci:
JTable tbl = new JTable(3,3) {
DefaultTableCellRenderer renderRight = new DefaultTableCellRenderer();
{ // initializer block
renderRight.setHorizontalAlignment(SwingConstants.RIGHT);
}
@Override
public TableCellRenderer getCellRenderer (int arg0, int arg1) {
return renderRight;
}
};
Je n'avais pas pensé à utiliser un bloc d'initialisation dans les classes anonymes. Résout le manque de constructeur, bien. – PeterVermont
-1 pour court-circuiter tout le support pour la configuration du moteur de rendu fin de la table (en retournant un pour tous) Il n'y a pas besoin de sous-classe, utilisez plutôt API/table pour installer des moteurs de rendu personnalisés – kleopatra
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
table.getColumnModel().getColumn(4).setCellRenderer(rightRenderer);
+1 pour une réponse correcte, juste: a) * NE PAS SHOUT * b) s'il vous plaît apprendre les conventions de nommage java et respectez-les (vous pouvez modifier votre réponse et corriger les deux) – kleopatra
Je l'ai trouvé fonctionnel mais seulement partiellement. 1) Si vous définissez d'abord le rendu de colonne, puis le modèle, le modèle invalide le rendu déjà défini, faites-le 'null'. 2) J'utilise Nimbus L & F, et le moteur de rendu nouvellement défini change la couleur d'arrière-plan pour être incompatible avec les autres cellules. Je peux ouvrir une question à propos de ce problème. – FaithReaper
Avez-vous même essayé? cela ne fonctionne pas. Même si c'était le cas, je n'aimerais pas vraiment cette approche juste parce que vous essayez de tromper la classe en pensant que vous utilisez un certain type d'objet, ce qui peut avoir d'autres conséquences qui vont au-delà du simple alignement du texte. – searchengine27
@ searchengine27: Merci d'avoir commenté; J'ai corrigé le lien pour pointer vers un exemple plus représentatif. Ce n'est pas un truc. c'est un [jeton de type] (http://stackoverflow.com/a/13673688/230513). – trashgod