Amélioration de JDatePicker

stealone
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
31 mars 2016
- Modifié par stealone le 31/03/2016 à 15:13
Bonjour,
J'aimerai améliorer à mon goût le code source de JDatePicker en utilisant au lieu d'un JTable, un tableau de JLablel qui a un avantage de bien réagir aux passages de la souris quand les méthodes sont bien choisies et bien codées, par rapport à un JTable. je souhaite qu'il ait l'aspect du sélecteur de date de PhpMyadmin, je me trouve donc coincé au niveau du modèle de données.
concernant l'IHM tout va bien. Dans le code de JDatePicker le modèle utilisé est :

protected class InternalCalendarModel implements TableModel, SpinnerModel, ChangeListener {
//Le modèle utilisé est JCalendar
private DateModel<?> model;
private Set<ChangeListener> spinnerChangeListeners;
private Set<TableModelListener> tableModelListeners;

public InternalCalendarModel(DateModel<?> model) {
this.spinnerChangeListeners = new HashSet<ChangeListener>();
this.tableModelListeners = new HashSet<TableModelListener>();
this.model = model;
model.addChangeListener(this);
}

public DateModel<?> getModel() {
return model;
}

/**
  • Part of SpinnerModel, year */ public void addChangeListener(ChangeListener arg) { spinnerChangeListeners.add(arg); } /** * Part of SpinnerModel, year */ public void removeChangeListener(ChangeListener arg) { spinnerChangeListeners.remove(arg); } /** * Part of SpinnerModel, year */ public Object getNextValue() { return Integer.toString(model.getYear() + 1); } /** * Part of SpinnerModel, year */ public Object getPreviousValue() { return Integer.toString(model.getYear() - 1); } /** * Part of SpinnerModel, year */ public void setValue(Object text) { String year = (String) text; model.setYear(Integer.parseInt(year)); } /** * Part of SpinnerModel, year */ public Object getValue() { return Integer.toString(model.getYear()); } /** * Part of TableModel, day */ public void addTableModelListener(TableModelListener arg) { tableModelListeners.add(arg); } /** * Part of TableModel, day */ public void removeTableModelListener(TableModelListener arg) { tableModelListeners.remove(arg); } /** * Part of TableModel, day */ public int getColumnCount() { return 7; } /** * Part of TableModel, day */ public int getRowCount() { return 6; } /** * Part of TableModel, day */ public String getColumnName(int columnIndex) { ComponentTextDefaults.Key key = ComponentTextDefaults.Key.getDowKey(((firstDayOfWeek - 1) + columnIndex) % 7); return getTexts().getText(key); } private int[] lookup = null; /** * Results in a mapping which calculates the number of days before the first day of month * * DAY OF WEEK * M T W T F S S * 1 2 3 4 5 6 0 * * or * * S M T W T F S * 0 1 2 3 4 5 6 * * DAYS BEFORE * 0 1 2 3 4 5 6 * * @return */ private int[] lookup() { if (lookup == null) { lookup = new int[8]; lookup[(firstDayOfWeek - 1) % 7] = 0; lookup[(firstDayOfWeek + 0) % 7] = 1; lookup[(firstDayOfWeek + 1) % 7] = 2; lookup[(firstDayOfWeek + 2) % 7] = 3; lookup[(firstDayOfWeek + 3) % 7] = 4; lookup[(firstDayOfWeek + 4) % 7] = 5; lookup[(firstDayOfWeek + 5) % 7] = 6; } return lookup; } /** * Part of TableModel, day * * previous month (... -1, 0) -> * current month (1...DAYS_IN_MONTH) -> * next month (DAYS_IN_MONTH + 1, DAYS_IN_MONTH + 2, ...) */ public Object getValueAt(int rowIndex, int columnIndex) { int series = columnIndex + rowIndex * 7 + 1; Calendar firstOfMonth = Calendar.getInstance(); firstOfMonth.set(model.getYear(), model.getMonth(), 1); int dowForFirst = firstOfMonth.get(Calendar.DAY_OF_WEEK); int daysBefore = lookup()[dowForFirst - 1]; return series - daysBefore; } /** * Part of TableModel, day */ @SuppressWarnings({"unchecked", "rawtypes"}) public Class getColumnClass(int arg0) { return Integer.class; } /** * Part of TableModel, day */ public boolean isCellEditable(int arg0, int arg1) { return false; } /** * Part of TableModel, day */ public void setValueAt(Object arg0, int arg1, int arg2) { } /** * Called whenever a change is made to the model value. Notify the * internal listeners and update the simple controls. Also notifies the * (external) ChangeListeners of the component, since the internal state * has changed. */ private void fireValueChanged() { //Update year spinner for (ChangeListener cl : spinnerChangeListeners) { cl.stateChanged(new ChangeEvent(this)); } //Update month label internalView.updateMonthLabel(); //Update day table for (TableModelListener tl : tableModelListeners) { tl.tableChanged(new TableModelEvent(this)); } } /** * The model has changed and needs to notify the InternalModel. */ public void stateChanged(ChangeEvent e) { fireValueChanged(); } }

Moi je voudrais récupérer les donnée pour les afficher dans les JLabel et les mettre à jour lorsque l'on choisi une nouvelle année. mais je ne sais pas comment les avoir ces données. pour précision je parle de numéros des jours de chaque mois sélectionné en fonction de l'année. Je souhaite faire une boucle pour remplir mes JLabels.
Merci de m'éclairer.
Tout ce qui brille n'est pas or.