Bonjour à tous,
dans un une classe qui extends une JTable je construit une JTable dans laquelle je dessine des rectangles dedans. Ensuite, je créé une JScrollPane sur cette JTable, le problème c'est que la barre horizontal de ma JScrollPane n'apparaît pas qd des rectangles dépasse de la surface...
Code de ma class construisant ma JTable et dessinant les rectangles:
le bout de code dans l'autre class qui me créé ma JScrollPane:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 public class TableHeure extends JTable { // contient tous les rectangles qui dessine un evenement private Rectangle[] tousRectangle; private LinkedList list; //contient tous les evenements du jour private JPopupMenu menu; //menu deroulant lors d'un clique droit private JMenuItem details; //action possible sur un evenement private JMenuItem modifier; //action possible sur un evenement private JMenuItem supprimer;//action possible sur un evenement private TableHeure jtable; //utilise lorsque l'ecouteur se met en route /** * Constructeur. En premier lieu il construit la JTable * @param t * @param s * @param date a laquelle on devra cree cette JTable */ public TableHeure(Object[][] t,String[] s,MaDate date) { super(t,s); //cree la JTable jtable = this; addMouseListener(getMouseListener()); //ajout un ecouteur a cet objet list = new ActionEvents().getEvents(date); //test si la liste est vide on stoppe if( list == null) return; tousRectangle = new Rectangle[list.size()]; //format utilise SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH'h'mm "); Date DDebutPrec = null; //utilise dans le "for" Date DFinPrec = null; //utilise dans le "for" int decalage = 30; //coin superieur gauche du rectangle //on construit les rectangles for(int i = 0; i < list.size();i++) { Date DDebut = null; Date DFin = null; try { DDebut = format.parse(((Events)list.get(i)).getDateDebut()); DFin = format.parse(((Events)list.get(i)).getDateFin()); } catch (ParseException e1) { e1.printStackTrace(); } /** * On test en regardant si l'evenement precedent n'est pas a cheval * sur l'evenement i. Si tel est le cas, on decale sa position. * On ne peut que regarder le precedent car les evenements sont tries */ if (DDebutPrec != null && ( (DDebut.compareTo(DDebutPrec) >= 0 && DDebut.compareTo(DFinPrec) <=0) || (DFin.compareTo(DDebutPrec) >= 0 && DFin.compareTo(DFinPrec) <=0))) { decalage+=95; } //"nbrMinute" sert a placer correctement dans notre JTable int nbrMinutes = DDebut.getHours() * 60 + DDebut.getMinutes(); int hauteur = DFin.getHours() * 60 + DFin.getMinutes(); tousRectangle[i] = new Rectangle(decalage,nbrMinutes/3 ,93,(hauteur-nbrMinutes)/3); //"nbrMinutes/3" on divise en 3 pour respecter l'echelle de // notre JTable.Ainsi le dessin correspondra aux heures. DDebutPrec = DDebut; DFinPrec = DFin; } //construction de notre Menu deroulant menu = new JPopupMenu(); details = new JMenuItem("Details"); supprimer = new JMenuItem("Supprimer"); modifier = new JMenuItem("Modifier"); menu.add(details); menu.add(supprimer); menu.add(modifier); } public void paint(Graphics g) { super.paint(g); //on teste si il y a des evenements if (tousRectangle == null) return; //on dessine les rectangles for(int i = 0; i < tousRectangle.length;i++) { g.setColor(Color.LIGHT_GRAY); g.fill3DRect(tousRectangle[i].x,tousRectangle[i].y, tousRectangle[i].width,tousRectangle[i].height, true); g.setColor(Color.black); String sujet = ((Events)list.get(i)).getInfo()[0]; //contient le sujet g.drawString(sujet, tousRectangle[i].x + 5, tousRectangle[i].y + 12); } }
Voila un aperçu du programme, regarder la barre horizontal n'apparaît pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 listeHeures = new TableHeure(tableauObject,titre,date); //construit une scrollpanne et l'ajout au panel scrollPane = new JScrollPane(listeHeures); scrollPane.setPreferredSize(new Dimension(230,350)); this.add(scrollPane);
Partager