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);
}
} |
Partager