ok mais c'est du JXTable... j'avais pas compris.... :traine: Désolé...
Je n'ais pas compris pourquoi tu m'a affiché cette fenetre de test eclesia... Tu pourrais m'expliquer ce que tu voulais me montrer?
Version imprimable
ok mais c'est du JXTable... j'avais pas compris.... :traine: Désolé...
Je n'ais pas compris pourquoi tu m'a affiché cette fenetre de test eclesia... Tu pourrais m'expliquer ce que tu voulais me montrer?
... c'est juste une demonstration de ce que peut faire la JXTable.
as tu reglé ton probleme?
Ben non je n'y suis toujours pas arrivé...
C'est vraiment trop bizarre pour être honnête.
As-tu essayé d'afficher ta JTable toute seule dans une JDialog modale à part, avant de l'intégrer dans ta fenêtre compliquée ? Ca pourrait nous dire si ça vient de la JTable ou du Layout.
En fait cette JTable je l'affiche déja dans un jpanel sur une autre fenetre, donc pour moi ca vien du gridbag...
une Jtable se met dans un JScrollPaneCitation:
JTable je l'affiche déja dans un jpanel
Alors il faut savoir que les headers de la JTable sont affichés dans le ColumnHeader du JScrollPane (de manière à rester visibles quand on scrolle).
As tu essayé de jouer sur les tailles préférées du JScrollPane et de son JViewport ? Sachant que la différence entre leurs tailles est ce qui reste aux headers.
Sinon, tu peux essayer de redéfinir le ScrollPaneLayout de ton JScrollPane de manière à forcer la taille préférée au columnHeader.
Oula oui pardon je le met bien dans un JScrollPane... désolé voici mon code pour vous montrer...
Code:
1
2
3
4
5
6 tab.getTableHeader().setReorderingAllowed(false); JScrollPane scrolltab=new JScrollPane(tab); scrolltab.setPreferredSize(new Dimension(200,250)); gridbag.setConstraints(scrolltab, constraint); _schemepanel.add(scrolltab);
Je reviens de la javadoc et du code source du ScrollPaneLayout, et si le ColumnHeader est présent et visible, il obtient obligatoirement sa taille préférée.
Donc je suis à peu près certain que le problème vient de ton JTableHeader.
Tu peux faire la batterie de tests suivants :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 JTableHeader h = table.getTableHeader(); JLabel l = new JLabel("Hello world"); System.out.println(h.getPreferredSize().height); System.out.println(l.getPreferredSize().height); // déjà, si là c'est le même nombre, c'est pas la peine de continuer, // et j'abandonne. System.out.println(g.getFont().getSize()); System.out.println(l.getFont().getSize()); //là je vois pas d'autres sources d'erreur. [EDIT]System.out.println(h.getCellRenderer().getClass()); // pour vérifier que c'est bien un descendant de JLabel, mais je pense que oui.
Ok j'ais fais ces teste et voici ce que la console me retourne...
Citation:
5
15
11
12
Ben voila, c'est le JTableHeader qui foire ! Il dit que sa taille préférée est de 5 ! Même pas assez pour afficher le texte qu'il contient (de taille 11) !
Tu peux essayer de redéfinir le TableCellRenderer (en surchargeant la méthode getPreferredSize()), ou sinon il faudra te taper un JTableHeader, mais c'est quand même bizarre qu'il décide tout à coup de changer de taille préférée. T'es sur que tu n'y touches pas ?
En tout cas, une solution simple (j'espère qu'elle marchera) mais un peu crade :Code:
1
2
3
4
5
6
7
8 maTable.setTableHeader(new JTableHeader() { public Dimension getPreferredSize() { Dimension d = super.getPreferredSize(); if(d.height < 12) d.height = 12; return d; } });
J'ais éssayé ce que tu m'a dit mais ca ne marche pas... peu etre que je ne sais pas ou le mettre...
Non, désolé, en fait je viens de tester, ça ne sert à rien. La seule chose qui marche chez moi, c'est de faire :Si ça marche pas chez toi, je n'ai plus de suggestions.Code:
1
2
3 Dimension d = table.getTableHeader().getPreferredSize(); d.height = 50; // ou autre, mais autant s'aligner sur le JLabel. table.getTableHeader().setPreferredSize(d);
Fantastique !!!!!!!! ca marche... bon 50 pour la taille ca fais un peu beaucoup mais c'est cool... merci beaucoup
N'empêche qu'on a pas résolu le problème à la base, c'est pas normal que le header se mette aussi petit. Mais bon, ça suffira pour aujourd'hui.