Bonjour,
est-il possible de centrer les éléments contenues dans chaque case d'une JTable?
Si oui comment faire ?
Autre question :
Est-il possible de donner une couleur aux cases ?
Merci
Bonjour,
est-il possible de centrer les éléments contenues dans chaque case d'une JTable?
Si oui comment faire ?
Autre question :
Est-il possible de donner une couleur aux cases ?
Merci
tout a fait possible, il faut redéfinir les cellRenderers de ta table.
pour les couleurs tu peux te tourner vers la JXTable de swingx qui permet d'avoir des highlighters (et donc des couleurs de fond).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class MyTableCellRenderer extends JLabel implements TableCellRenderer { /** Creates a new instance of MyTableCellRenderer */ public TableHorCellRenderer() { this.setOpaque(true); }un chti exemple si ca peut t'etre utile
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { int column_ = table.convertColumnIndexToModel(column); if (column_ < 3) { super.setBackground(Color.WHITE); } else if (column_ > 2 && column_ < 6) { super.setBackground(Main.tempColor); } else if (column_ > 5 && column_ < 12) { super.setBackground(Main.precipColor); } else if (column_ > 11 && column_ < 14) { super.setBackground(Main.humidColor); } else if (column_ > 13 && column_ < 19) { super.setBackground(Main.windColor); } else if (column_ > 18 && column_ < 23) { super.setBackground(Main.tempColor); } else if (column_ > 22) { super.setBackground(Main.insolColor); } this.setHorizontalAlignment(SwingConstants.RIGHT); this.setFont(table.getFont()); setValue(value); return this; }
/!\ plus de gestion de focus ni de selection ici si tu veux les conserver recupere le code correspondant dans le DefaultCellRenderer de swing
Bonjour,
J'utilise le bout de code suivant pour l'appel
La classe TabCellRenderer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 MyTableModel maTable = new MyTableModel(titres); JTable jTable = new JTable(maTable); ((MyTableModel)jTable.getModel()).remplie(donnees); TabCellRenderer renderer = new TabCellRenderer(); jTable.setDefaultRenderer(Object.class, renderer); JScrollPane scroll = new JScrollPane(jTable,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(200, 100)); panel.setLayout(new BorderLayout()); panel.add(new JScrollPane(scroll), BorderLayout.CENTER);
La classe MyTableModel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 import javax.swing.table.DefaultTableCellRenderer; public class TabCellRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; public TabCellRenderer() { setHorizontalAlignment(CENTER); setVerticalAlignment(CENTER); } }
Quand je lance le ^programme, j'obtiens ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 import javax.swing.table.AbstractTableModel; import java.util.List; import java.util.ArrayList; public class MyTableModel extends AbstractTableModel{ private static final long serialVersionUID = 1L; String[] colonnes;// = {"PERSONNE", "EQUIPE", "OUVERT","FERME", "OUVERT & FERME", "EN_COURS"}; //la liste du contenu du tableau private List<Object[]> allLignes = new ArrayList<Object[]>(); //constructeur vide public MyTableModel(String[] colonnes){ this.colonnes = colonnes; } //constructeur avec la liste public MyTableModel(List<Object[]> allLignes){ //test si la liste est vide rajouter une ligne vide if (allLignes == null || allLignes.size()<1){ allLignes.add(new Object[colonnes.length]); } this.allLignes = allLignes; } /* retourne le nombre d'element de la colonne */ public int getColumnCount() { return colonnes.length; } /* retourne le nombre de lignes */ public int getRowCount() { return allLignes.size(); } /* retourne le nom de la colonne */ public String getColumnName(int col) { return colonnes[col]; } /* retourne la valeur à la ligne row et colonne col */ public Object getValueAt(int row, int col) { return allLignes.get(row)[col]; } public Class<?> getColumnClass(int c) { return getValueAt(0, c).getClass(); } /* definie les cellules éditables ou non */ public boolean isCellEditable(int row, int col) { return false; } /* permet de modifier l'element en placant value a la ligne row colonne col */ public void setValueAt(Object value, int row, int col) { allLignes.get(row)[col] = value; fireTableCellUpdated(row, col); // on signal un changement } //Rempli le tableau public void remplie(List<Object[]> lignes){ allLignes = lignes; //On signale le changement des données aux listeners : fireTableDataChanged(); } //Vide la table public void vide(){ allLignes.removeAll(allLignes); fireTableRowsDeleted(0,getRowCount()); } }
http://cjoint.com/data/hzqDCHWGx6.htm
Seul les éléments de la premiere colonne sont centrées mais pas les autres
Quelqu'un aurait-il une explication ainsi qu'une solution a me proposer ?
Merci
je pense que tu n'as pas compris comment est utilisé un CellRenderer. L'objet est crée une seule fois puis deplacé, modifié et affiché autant de fois qu'il y a de cellule. Il est inutile donc de surcharger le constructeur car le CellRenderer sera plus ou moins modifié par l'appel de getTableCellRendererComponent(...);
La seule chose a mettre dans le constructeur est le setOpaque(true); si tu veut modifier le background.
Si tu herite de DefaultCellRenderer je pense que tu dois surcharger getTableCellRendererComponent de cette facon :
PS petite question t'utilise quel LookAndFeel ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(CENTER); this.setVerticalAlignment(CENTER); // inutile c la valeur par defaut }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager