Bonjour à tous,
Je recherche un moyen de mettre deux JScrollPane dans un JTable et de plus rajouter un ligne de commentaire dans les colonnes fixes.
Version imprimable
Bonjour à tous,
Je recherche un moyen de mettre deux JScrollPane dans un JTable et de plus rajouter un ligne de commentaire dans les colonnes fixes.
A quel niveau cherches tu à mettre le second JScrollPäne?
Tu cherches à avoir des colonnes fixes?
Dans ce cas là ça se fait très bien avec un unique JScrollPane et deux JTable.
Une JTable contenant les colonnes fixes que l'on va placer dans le rowHeader du JScrollPane et le reste des colonnes que l'on mettra dans la seconde JTable que l'on placera dans le viewport du JScrollPane.
(fais une recherche sur JTable colonne fixe dans le forum, il y a un paquet de posts à ce sujet qui traînent).
J'ai trouvé comment faire mes JScrollPane mais j'ai un nouveau problème. Je cherche le moyen de mettre un commentaire sur le bords de la fenêtre de gauche du JTable.
Je souhaite indiquer les numéro de la matrice qui va de 1 à n.
Voici mon code :
Ma matrice que j'ai est suivant regardé le lien suivant:Citation:
package tablePixel;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
/**
* Table Pixel
* @author Dimitri PIANETA
* @see dimitri.pianeta@gmail.com
* @version 1
*/
public class Table3 {
public Table3(String value[][]){
JFrame frame = new JFrame("Table Pixel");
JPanel panel = new JPanel();
int h = value.length;
int w = value[0].length;
String[] col = new String[h];
String[] rows = new String[w];
for (int i = 0; i<h; i++){
col[i] = String.valueOf(i);
}
for (int i =0; i<w;i++) {
rows[i] = String.valueOf(i);//Rows
}
//Transformation matrice
String[][] value2 = new String[w][6];
int i =0;
while(i<w){
value2[i][5]= rows[i];
i++;
}
JTable table = new JTable(value,col);
JTableHeader header = table.getTableHeader();
header.setBackground(Color.yellow);
//JScrollPane pane = new JScrollPane(table);
JTable rowHeader = new JTable(value2, col);
rowHeader.setBackground(Color.yellow);
JScrollPane pane = new JScrollPane();
pane.setViewportView(table);
pane.setRowHeaderView(rowHeader);
rowHeader.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
panel.add(pane);
frame.add(panel);
frame.setSize(1000,500);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
http://forums.dcm4che.org/jiveforums...=3821&tstart=0
J'ai résolu le problème en faisant deux tableaux, j'ai un tableau fixe.
Mais je souhaite que le tableau fixe soit coller au tableau mobile.
Voici mon code :
Je vous joins la capture d'écran.Code:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 public Table6(int value[][]){ JFrame frame = new JFrame("Table Pixel"); JPanel panel = new JPanel(); int h = value.length; int w = value[0].length; String[] col = new String[h+1]; String col1[] = new String[1]; col1[0] =String.valueOf(""); String[] rows = new String[w]; String[] rows2 = new String[w]; for (int i = 0; i<h; i++){ col[0] =String.valueOf(""); col[i+1] = String.valueOf(i);//columns } for (int i =0; i<w;i++) { rows[i] = String.valueOf(i);//Rows } for (int i =0; i<w;i++) { rows2[i] = String.valueOf(i);//Rows } //Transformation matrice String[][] value2 = new String[w][6]; int i =0; while(i<w){ value2[i][5]= rows[i]; i++; } //Translate value String[][] value3 = new String[w+1][h+1]; for (int x =0; x<h; x++){ for (int y=0; y<w;y++){ value3[x][y+1]= String.valueOf(value[x][y]); value3[x][0] = rows[x]; } } String[][] value4 = new String[w+1][1]; for (int x =0; x<w; x++){ value4[x][0] = rows2[x]; } DefaultTableModel dtm = new DefaultTableModel(value3,col); JTable table=new JTable(dtm) { public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component component = super.prepareRenderer(renderer,row,column); if(column == 0) { component.setBackground(Color.yellow); } if(column !=0) { component.setBackground(Color.white); } return component; } }; DefaultTableModel dtm2 = new DefaultTableModel(value4,col1); JTable table5=new JTable(dtm2); table5.getColumnModel().getColumn(0).setMaxWidth(29); table5.setLocation(w,0 ); table.getTableHeader().setReorderingAllowed(false);//lock colonne table.getTableHeader().setResizingAllowed(false); for(int r = 0; r<w+1; r++){ table.getColumnModel().getColumn(r).setPreferredWidth(29); } JTableHeader header = table.getTableHeader(); header.setBackground(Color.yellow); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table5.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane pane = new JScrollPane(panel); pane.setRowHeaderView( table5); pane.setViewportView(table); frame.add(pane); // frame.add(panel); frame.setSize(500,500); frame.setUndecorated(true); frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }
Merci d'avance,