IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Faire un planning avec JTable


Sujet :

Java

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Faire un planning avec JTable
    Bonjour,

    Je chercher à faire un planning avec JTable.
    En effet, je souhaiterais afficher les jours d'une semaine et pour voir changer de semaine en affichant les numéros des semaines en bas dans une scrollBar.

    JE ne vois pas comment faire.

    Pouvez-vous m'aider ou me donner des exemples de codes.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Une scrollbar pour afficher les fenêtres : ça va pas être simple à mon avis. Un JSlider peut-être, ou tout simplement une ligne de JLabel, sans un JScrollPane éventuellement.

    Pour le JSlider, ça donnerait ça, par exemple :

    Nom : JSlider.PNG
Affichages : 1614
Taille : 3,5 Ko

    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
    JSlider slider = new JSlider();
    		slider.setMinimum(1);
    		slider.setMaximum(52); // 53
    		slider.setMajorTickSpacing(4);
    		slider.setMinorTickSpacing(1);
    		Hashtable<Integer, JLabel> labels = new Hashtable<Integer, JLabel>();
    		for(int i=1;i<52; i+=4) {
    			labels.put(i, new JLabel(String.valueOf(i)));
    		}
    		labels.put(52, new JLabel("52"));
    		slider.setLabelTable(labels);
    		slider.setPaintLabels(true);
    		slider.setPaintTicks(true);
    		slider.setPaintTrack(true);
    		slider.setSnapToTicks(true);


    Pour les labels, par exemple :

    Nom : CaptureLabels.PNG
Affichages : 1556
Taille : 3,7 Ko

    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
     
    Color color = new Color(111,199,227);
    JPanel weeks = new JPanel();
    		weeks.setLayout(new GridLayout(1, 0));
    		for(int i=1; i<=52; i++) {
    			JLabel label = new JLabel(String.valueOf(i), JLabel.CENTER);
    			label.setBorder(BorderFactory.createEmptyBorder(0,5,0,5));
    			label.setOpaque(true);
    			if ( i%2==0 ) {
    				label.setBackground(Color.WHITE);
    			}
    			else {
    				label.setBackground(color);
    			}
    			label.setEnabled(true);
    			label.addMouseListener(new MouseAdapter() {
    				@Override
    				public void mouseClicked(MouseEvent e) {
    					// selection d'une semaine
    				}
    			});
    			weeks.add(label);
    		}
     
    		JScrollPane slider = new JScrollPane(weeks, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);


    Pour la JTable, ça dépend un peu de la présentation. A part une JTable avec 7 lignes (une par jour, et encore, il y a des semaines de moins de jours, tout dépend ce qu'on appelle semaine d'ailleurs) et combien de colonnes (un nombre fixe, dynamique ?). Enfin, c'est un peu du standard : tu trouveras des centaines d'exemples sur le net, et en particulier dans les tutoriels Developpez, comme celui-là, par exemple.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je voudrais une JTable avec 7 colonnes pour les jours de la semaine et 2 ligne pour matin et après midi

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Ce que je cherche donc c'est associer un JTable et un JCalendar

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai trouvé ce code mais je vois pas comment l'adapter:
    https://students.cs.byu.edu/~cs240ta...darViewer.java

    Nom : Capture.PNG
Affichages : 3015
Taille : 31,0 Ko

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Personne peut m'aider?
    Cela fait deux semaine que je galère desus

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    T'aider à quoi : tu as un source, il ne reste qu'à le lire, à l'adapter (là où y a un mois de 28, 30 ou 31 jours), il y a une semaine de 7 jours. Si tu as des questions précises sur un truc que tu ne comprends pas ou que tu n'arrives pas à faire fonctionner, dis-le et on t'aidera surement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je Chercher à faire une basse comme la seconde que tu m'a mi sauf que je souhaite afficher dans chaque label cliquable bien sur pour pouvoir changer de semaine à afficher par exemple : 23 - 29 mars (13)

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Donc juste changer le label : à partir d'un numéro de semaine, obtenir la date du premier jour et du dernier, formatée.

    Exemples en Java7 et Java8 :

    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
    public class WeekDate {
     
    	public static void main(String[] args) {
    		System.out.println(toLabelJ7(13, 2015));
    		System.out.println(toLabelJ8(13, 2015));
    	}
     
     
     
    	private final static DateTimeFormatter LOCAL_DATE_DEBUT_FORMAT = DateTimeFormatter.ofPattern("dd");
    	private final static DateTimeFormatter LOCAL_DATE_FORMAT = DateTimeFormatter.ofPattern("dd MMMM");
     
    	private static String toLabelJ8(int week, int year) {
     
    		LocalDate date = Year.of(year).atDay(1);
     
    		date = date.plusWeeks(week - 1).with(DayOfWeek.MONDAY);
     
    		LocalDate premierJour = date;
     
    		LocalDate dernierJour = date.plusDays(6);
     
    		String debut;
    		if (premierJour.getMonth().equals(dernierJour.getMonth()) ) {
    			debut = LOCAL_DATE_DEBUT_FORMAT.format(premierJour);
    		} else {
    			debut = LOCAL_DATE_FORMAT.format(premierJour);
    		}
     
    		String milieu = dernierJour.format(DateTimeFormatter.ofPattern("dd MMMM"));
     
    		String fin = " (" + week + ")";
     
    		return debut + " - " + milieu + fin;
     
    	} 
     
    	private final static DateFormat DATE_DEBUT_FORMAT = new SimpleDateFormat(
    			"dd");
    	private final static DateFormat DATE_FORMAT = new SimpleDateFormat(
    			"dd MMMM");
     
    	public static String toLabelJ7(int week, int year) {
     
    		Calendar calendar = Calendar.getInstance();
    		calendar.clear();
    		calendar.set(Calendar.WEEK_OF_YEAR, week);
    		calendar.set(Calendar.YEAR, year);
     
    		Date premierJour = calendar.getTime();
    		int monthPremierJour = calendar.get(Calendar.MONTH);
     
    		calendar.add(Calendar.DATE, 6);
     
    		Date dernierJour = calendar.getTime();
     
    		int monthDernierJour = calendar.get(Calendar.MONTH);
     
    		String debut;
    		if (monthDernierJour == monthPremierJour) {
    			debut = DATE_DEBUT_FORMAT.format(premierJour);
    		} else {
    			debut = DATE_FORMAT.format(premierJour);
    		}
     
    		String milieu = DATE_FORMAT.format(dernierJour);
     
    		String fin = " (" + week + ")";
     
    		return debut + " - " + milieu + fin;
     
    	}
     
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je suis complètement perdu!!!
    J'arrive pas du tout à faire ce que je veux

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Si tu nous dis pas ou çà coince, je ne vois pas comment on pourrait t'aider.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Voici mon code:
    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
    public class CalendarWeekTableModel     extends AbstractTableModel {
     
        private String[] dayNames;
        private Calendar calendar;
     
        public CalendarWeekTableModel(Calendar calendar) {
        	this.calendar = calendar;
            dayNames = getDayNames();
        }
     
        public int getColumnCount() {
        	// ramene les 7 jours de la semaine
            return 7;
        }
     
        public int getRowCount() {
        	// ramene le nombre de ligne
        	// nombre de demi journée 
        	return 2;
        }
     
        public String getColumnName(int col) {
            return dayNames[col];
        }
     
        public Object getValueAt(int row, int col) {
            int dayOfMonth = row * 7 + col - getFirstDayOfWeek() + 2;
            if (dayOfMonth < 1 || dayOfMonth > getLastDayOfMonth()) {
                return "";
            }
            else {
                return new Integer(dayOfMonth).toString();
            }
        }
     
        public boolean isCellEditable(int row, int col) {
            return true;
        }
     
        public void setValueAt(Object value, int row, int col) {
     
        }
     
        private String[] getDayNames() {
            String[] dayNames = new String[7];
            SimpleDateFormat fmt = new SimpleDateFormat("EEEE");
            Calendar cal = Calendar.getInstance();
     
            cal.set(Calendar.DAY_OF_MONTH, 1);
     
            for (int i=0; i < 7; ++i) {
                cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + 1);
                dayNames[i] = fmt.format(cal.getTime());
            }
     
            return dayNames;
        }
     
        private int getFirstDayOfWeek() {
            return calendar.get(Calendar.DAY_OF_WEEK);
        }
     
        private int getLastDayOfMonth() {
            return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        }
    }
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    public class CalendarWeekViewer extends JFrame implements ActionListener {
     
        Calendar calendar;
        DateFormat dateFormatter;
     
        CalendarWeekTableModel tableModel;
     
        JLabel monthLabel;
        JTable table;
        JButton prevButton;
        JButton nextButton;
     
     
        public CalendarWeekViewer() {
            super("Calendar Viewer");
     
            calendar = Calendar.getInstance();
            calendar.set(Calendar.DAY_OF_MONTH, 0);
     
            dateFormatter = new SimpleDateFormat("MMMM yyyy");
     
            createComponents();
        }
     
        private void createComponents() {
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
     
            monthLabel = new JLabel(dateFormatter.format(calendar.getTime()));
            monthLabel.setFont(new Font(null, Font.PLAIN, 36));
            monthLabel.setVerticalAlignment(JLabel.CENTER);
            monthLabel.setHorizontalAlignment(JLabel.CENTER);
     
            tableModel = new CalendarWeekTableModel(calendar);
            table = new JTable((TableModel)tableModel);
            table.setPreferredScrollableViewportSize(new Dimension(700, 600));
            table.setDefaultRenderer(String.class, new CalendarDayRenderer());
            table.setRowHeight(200);
            TableColumnModel tableColumnModel = table.getColumnModel();
            for (int i=0; i < tableColumnModel.getColumnCount(); ++i) {
                TableColumn tableColumn = tableColumnModel.getColumn(i);
                tableColumn.setPreferredWidth(200);
            }
     
            JScrollPane tableScrollPane = new JScrollPane(table);
     
            prevButton = new JButton("<<");
            prevButton.addActionListener(this);
     
            nextButton = new JButton(">>");
            nextButton.addActionListener(this);
     
            JPanel btnPanel = new JPanel();
            btnPanel.add(prevButton);
            btnPanel.add(nextButton);
     
            getContentPane().add(monthLabel, BorderLayout.NORTH);
            getContentPane().add(tableScrollPane, BorderLayout.CENTER);
            getContentPane().add(btnPanel, BorderLayout.SOUTH);
        }
     
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == prevButton) {
                int curMonth = calendar.get(Calendar.MONTH);
                if (curMonth == Calendar.JANUARY) {
                    int curYear = calendar.get(Calendar.YEAR);
                    calendar.set(Calendar.YEAR, curYear - 1);
                    calendar.set(Calendar.MONTH, Calendar.DECEMBER);
                }
                else {
                    calendar.set(Calendar.MONTH, curMonth - 1);
                }
                monthLabel.setText(dateFormatter.format(calendar.getTime()));
                tableModel.fireTableDataChanged();
            }
            else if (e.getSource() == nextButton) {
                int curMonth = calendar.get(Calendar.MONTH);
                if (curMonth == Calendar.DECEMBER) {
                    int curYear = calendar.get(Calendar.YEAR);
                    calendar.set(Calendar.YEAR, curYear + 1);
                    calendar.set(Calendar.MONTH, Calendar.JANUARY);
                }
                else {
                    calendar.set(Calendar.MONTH, curMonth + 1);
                }
                monthLabel.setText(dateFormatter.format(calendar.getTime()));
                tableModel.fireTableDataChanged();
            }
        }
     
        public static void main(String[] args) {
     
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    		        CalendarWeekViewer frame = new CalendarWeekViewer();
    		        frame.pack();
    		        frame.setVisible(true);
    			}
    		});
        }
    }
    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
    class CalendarWeekRenderer extends JLabel implements TableCellRenderer {
     
        public CalendarWeekRenderer() {
            super();
            setFont(new Font(null, Font.PLAIN, 28));
            setVerticalAlignment(JLabel.TOP);
            setHorizontalAlignment(JLabel.LEFT);
            setOpaque(true);
        }
     
        public Component getTableCellRendererComponent(JTable table, Object value,
                                                        boolean isSelected, boolean hasFocus,
                                                        int row, int column) {
            setText((String)value);
            return this;
        }
    }
    Nom : Capture.PNG
Affichages : 1671
Taille : 34,1 Ko

    Je n'arrive pas à mette ta basse. Et lorsque que je clique sur les flèches, sa passe directement au mois suivants. Je pense qu'il faut remplacer MONTH par WEEK mais je n'y arrive pas.

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Le programme que tu as pris étaient prévu pour afficher des mois : maintenant tu dois afficher des semaines.

    Premièrement, il faut donc changer la valeur qui est mise dans le Calendar au démarrage : déjà choisir une semaine, mettons la première de l'année en cours. Il suffit de changer le constructeur :

    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
    public CalendarWeekViewer() {
            super("Calendar Viewer");
     
            calendar = Calendar.getInstance();
     
            //calendar.set(Calendar.DAY_OF_MONTH, 0); // ça c'est ce qu'il y avait avant : on commençait au mois courant, et on choisissait le premier jour de ce mois
     
            calendar.set(Calendar.WEEK_OF_YEAR,calendar.getMinimum(Calendar.WEEK_OF_YEAR)); // on se positionne sur la première semaine de l'année
                    calendar.set(Calendar.DAY_OF_WEEK,calendar.getMinimum(Calendar.DAY_OF_WEEK)); // on se positionne sur le premier jour de la semaine
     
     
            dateFormatter = new SimpleDateFormat("MMMM yyyy");
     
            createComponents();
        }
    Ensuite le libellé en haut affiche le nom du mois : ce serait mieux d'afficher le nom de la semaine n'est-ce-pas ? Le label qui affiche cette information est monthLabel(je te laisse faire le ménage et donner le bon nom aux variables). On ne peut plus utiliser un simple formatter de date comme c'était avant : on a utiliser la méthode que je t'ai donné pour avoir le rendu que tu voulais, qu'on va mettre dans une méthode (je l'ai un peu changée) :

    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
    private String getWeekLabel() {
     
    	    	Calendar calendar = Calendar.getInstance(); // on créé un nouveau calendar pour pas modifier le calendar qui nous sert pour savoir quelle semaine on affiche
    	    	calendar.setTime(this.calendar.getTime()); // on recopie dedans la date actuellement mise dans le calendar qui ser pour savoir quelle semaine on affiche
     
    	    	int week = calendar.get(Calendar.WEEK_OF_YEAR); // on récupère le numéro de la semaine
     
                    // le premier jour de cette semaine
    	    	Date premierJour = calendar.getTime();
    		int monthPremierJour = calendar.get(Calendar.MONTH);
     
    	        // le dernier jour de cette semaine
    		calendar.add(Calendar.WEEK_OF_YEAR, 1);
    		calendar.add(Calendar.DAY_OF_WEEK, -1);
    		Date dernierJour = calendar.getTime();
     
    		int monthDernierJour = calendar.get(Calendar.MONTH);
     
    		String debut;
    		if (monthDernierJour == monthPremierJour) {
    			debut = DATE_DEBUT_FORMAT.format(premierJour);
    		} else {
    			debut = DATE_FORMAT.format(premierJour);
    		}
     
    		String milieu = DATE_FORMAT.format(dernierJour);
     
    		String fin = " (" + week + ")";
     
    		return debut + " - " + milieu + fin; 
    }
    Ensuite il suffit de remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     //monthLabel = new JLabel(dateFormatter.format(calendar.getTime()));
     monthLabel = new JLabel(getWeekLabel());




    Les boutons sont prévus pour incrémenter ou décrémenter les mois à l'origine (on verra plus tard pour mettre la barre de semaine que je t'avais indiquée) : tu dois modifier ces boutons pour modifier la numéro de semaine. L'action qui est faite sur ces boutons est dans la méthode actionPerformed :

    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
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == prevButton) {
        		calendar.add(Calendar.WEEK_OF_YEAR, -1); // on décrémente
        		enabledButtons();
     
                monthLabel.setText(getWeekLabel());
            	tableModel.fireTableDataChanged(); 
            }
            else if (e.getSource() == nextButton) {
        		calendar.add(Calendar.WEEK_OF_YEAR, 1); // on incrémente
        		enabledButtons();
     
                monthLabel.setText(getWeekLabel());
            	tableModel.fireTableDataChanged(); 
            }
        } 
     
        // cette méthode permet d'empêcher les boutons de changer d'année
        private void enabledButtons() {
        	int curWeek = calendar.get(Calendar.WEEK_OF_YEAR);
    		boolean previousEnabled=true;
    		boolean nextEnabled=true;
    		if ( curWeek==calendar.getMinimum(Calendar.WEEK_OF_YEAR) ) {
    			previousEnabled=false;
        	}
    		if ( curWeek==calendar.getMaximum(Calendar.WEEK_OF_YEAR) ) {
    			nextEnabled=false;
        	}
    		prevButton.setEnabled(previousEnabled);
    		nextButton.setEnabled(nextEnabled);
        }
    Pour rendre cohérent les boutons dès le départ, en ajoutant juste après leur création l'appel de la méthode enabledButtons() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JPanel btnPanel = new JPanel();
    btnPanel.add(prevButton);
    btnPanel.add(nextButton);
    enabledButtons();
    [EDIT]Maintenant supposons qu'on veuille que les titres des colonnes soit variables en fonction de la semaine. On va modifier le modèle pour rendre les noms des jours dynamiques. On va en profiter pour refaire la méthode de détermination des jours un peu moins bidouille :

    Premièrement, on remplace la méthode getDayNames() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private String getDayName(int day) {
        	Calendar calendarDay = Calendar.getInstance();
        	calendarDay.setTime(calendar.getTime());
    		calendarDay.add(Calendar.DATE, day);
    		return calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG_FORMAT, Locale.getDefault())+" "+calendarDay.get(Calendar.DATE);
    }
    On supprime le tableau en variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     //private String[] dayNames;
        private Calendar calendar;
     
        public CalendarWeekTableModel(Calendar calendar) {
        	this.calendar = calendar;
            //dayNames = getDayNames();
        }
    Et on fait pointer la méthode qui détermine le nom d'une colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public String getColumnName(int col) {
            return getDayName(col);
        }
    Ensuite, il faut indiquer qu'on ne change pas que les données à chaque changement de semaine, mais aussi la structure de la table : on va faire fireTableStructureChanged() au lieu de fireTableDataChanged() quand on incrémente ou décrémente le numéro de semaine, dans actionPerformed

    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
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == prevButton) {
        		calendar.add(Calendar.WEEK_OF_YEAR, -1); // on décrémente
        		enabledButtons();
     
                monthLabel.setText(getWeekLabel());
            	//tableModel.fireTableDataChanged(); 
            	tableModel.fireTableStructureChanged(); 
            }
            else if (e.getSource() == nextButton) {
        		calendar.add(Calendar.WEEK_OF_YEAR, 1); // on incrémente
        		enabledButtons();
     
                monthLabel.setText(getWeekLabel());
            	//tableModel.fireTableDataChanged(); 
            	tableModel.fireTableStructureChanged(); 
            }
        }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Et maintenant, la suite : le panel du bas.

    On va en faire un composant : on reprend le code que je t'ai donné et on fait une classe qui étend JPanel et qui le contient. Pour l'intégrer, il faut pouvoir l'interfacer avec le CalendarWeekViewer et l'instance de Calendar qui s'y trouve. On va donc les passer aux contructeurs du composant.

    On en profite pour factoriser un peu : mettre les couleurs en constantes pour pouvoir les modifier rapidement (à défaut d'en faire des paramètres, ce qu'on pourrait faire).

    Ensuite on a besoin :

    • de savoir quelle semaine est sélecitonnée : j'ai ajouté une variable selection
    • de pouvoir facilement retrouve un label de semaine : j'ai ajouté un tableau qui les stocke
    • de pouvoir rafraichir le composant
      • d'afficher la semaine sélectionnée, ce que je fais dans une couleur spéciale
      • de pouvoir automatiquement rafraichir le panel en fonction de la semaine sélectionnée si elle est sélectionnée par les autres boutons, ce que je fais par la méthode updateSelection(), avec appel de scrollToRectVisible pour qu'on voit le label la semaine sélectionnée
    • d'afficher les semaines du calendar et non plus une liste arbitraire de 1 à 52 (ou 53), donc récupérer cette liste à partir du calendar
    • d'afficher les labels qu'on veut (la j'ai pris les mêmes que pour le semainier (le getWeekLabel())


    Donc voici la classe :
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    public class WeekPanel extends JPanel {
     
    	private final static Color COLOR_EVEN = new Color(111, 199, 227);
    	private final static Color COLOR_ODD = Color.WHITE;
    	private final static Color COLOR_SELECTION = Color.YELLOW;
     
    	private final Calendar calendar;
    	private JLabel[] labels;
    	private int selection;
    	private CalendarWeekViewer viewer;
    	private JPanel weekPanel;
     
    	public WeekPanel(CalendarWeekViewer viewer, Calendar calendar) {
    		this.viewer=viewer;
    		this.calendar = calendar;
     
    		selection = calendar.get(Calendar.WEEK_OF_YEAR);
     
    		setLayout(new BorderLayout());
     
    		int premiereSemaine = calendar.getMinimum(Calendar.WEEK_OF_YEAR);
    		int derniereSemaine = calendar.getMaximum(Calendar.WEEK_OF_YEAR);
     
    		labels=new JLabel[derniereSemaine-premiereSemaine+1];
     
    		weekPanel = new JPanel(new GridLayout(1, 0));
    		for (int i = premiereSemaine; i <= derniereSemaine; i++) {
    			JLabel label = new JLabel(getWeekLabel(i), JLabel.CENTER);
    			label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
    			label.setOpaque(true);
    			labels[i-premiereSemaine]=label;
    			setLabelColor(i);
    			label.setEnabled(true);
    			final int week = i;
    			label.addMouseListener(new MouseAdapter() {
    				@Override
    				public void mouseClicked(MouseEvent e) {
    					setSelection(week);
    				}
    			});
    			weekPanel.add(label);
    		}
     
    		JScrollPane slider = new JScrollPane(weekPanel,
    				JScrollPane.VERTICAL_SCROLLBAR_NEVER,
    				JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    		add(slider, BorderLayout.CENTER);
    	}
     
    	private void setLabelColor(int week) {
    		int premiereSemaine = calendar.getMinimum(Calendar.WEEK_OF_YEAR);
    		JLabel label=labels[week-premiereSemaine];
    		if ( week==selection ) {
    			label.setBackground(COLOR_SELECTION);
    		}
    		else if (week % 2 == 0) {
    			label.setBackground(COLOR_ODD);
    		} else {
    			label.setBackground(COLOR_EVEN);
    		}
     
    	}
     
    	public void updateSelection() {
    		int premiereSemaine = calendar.getMinimum(Calendar.WEEK_OF_YEAR);
    		int oldSelection = selection;
    		selection = calendar.get(Calendar.WEEK_OF_YEAR);
    		setLabelColor(oldSelection);
    		setLabelColor(selection);
    		weekPanel.scrollRectToVisible(labels[selection-premiereSemaine].getBounds());
    	}
     
    	private void setSelection(int selection) {
    		int oldSelection = this.selection;
    		this.selection = selection;
    		setLabelColor(oldSelection);
    		setLabelColor(selection);
    		viewer.setWeek(selection);
    	}
     
    	private String getWeekLabel(int week) {
     
    		Calendar calendar = Calendar.getInstance(); 
    		calendar.setTime(this.calendar.getTime()); 
    		calendar.set(Calendar.WEEK_OF_YEAR, week);
     
    		// le premier jour de cette semaine
    		Date premierJour = calendar.getTime();
    		int monthPremierJour = calendar.get(Calendar.MONTH);
     
    		// le dernier jour de cette semaine
    		calendar.add(Calendar.WEEK_OF_YEAR, 1);
    		calendar.add(Calendar.DAY_OF_WEEK, -1);
    		Date dernierJour = calendar.getTime();
     
    		int monthDernierJour = calendar.get(Calendar.MONTH);
     
            return getWeekLabel(week, premierJour, dernierJour, monthPremierJour, monthDernierJour);		
     
    	}
     
    	private final static DateFormat DATE_DEBUT_FORMAT = new SimpleDateFormat(
    			"dd");
    	private final static DateFormat DATE_FORMAT = new SimpleDateFormat(
    			"dd MMMM");
     
    	public static  String getWeekLabel(int week, Date premierJour, Date dernierJour, int monthPremierJour, int monthDernierJour) {
    		String debut;
    		if (monthDernierJour == monthPremierJour) {
    			debut = DATE_DEBUT_FORMAT.format(premierJour);
    		} else {
    			debut = DATE_FORMAT.format(premierJour);
    		}
     
    		String milieu = DATE_FORMAT.format(dernierJour);
     
    		String fin = " (" + week + ")";
     
    		return debut + " - " + milieu + fin;
    	}
     
    }
    Puis on la branche dans CalendarWeekViewer.

    • On ajoute une variable pour stocker l'instance de WeekPanel, et surtout intéragir avec :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      private WeekPanel weekPanel;
    • Dans createComponents, on le créé, et pour le mettre en bas, on va créé un panel intermédiaire qui contiendra aussi le btnPanel
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      JPanel southPanel = new JPanel(new BorderLayout()); // le panel intermédiaire
       
      // ça, ça ne change pas
      JPanel btnPanel = new JPanel(); 
      btnPanel.add(prevButton);
      btnPanel.add(nextButton);
      enabledButtons();
       
      // on créé le weekPanel	
      weekPanel = new WeekPanel(this, calendar);
       
      // on met le btnPanel et le weekPanel dans le panel intermédiaire
      southPanel.add(btnPanel, BorderLayout.NORTH); 
      southPanel.add(weekPanel, BorderLayout.SOUTH);
      et à la place de getContentPane().add(btnPanel, BorderLayout.SOUTH);, on fait :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      getContentPane().add(southPanel, BorderLayout.SOUTH);
    • On a besoin d'appeler updateSelection() quand les boutons du CalendarWeekViewer, en modifiant actionPerformed
      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
      public void actionPerformed(ActionEvent e) {
              if (e.getSource() == prevButton) {
          		calendar.add(Calendar.WEEK_OF_YEAR, -1); // on décrémente
          		enabledButtons();
       
                  monthLabel.setText(getWeekLabel());
              	//tableModel.fireTableDataChanged(); 
              	tableModel.fireTableStructureChanged(); 
          		weekPanel.updateSelection();
              }
              else if (e.getSource() == nextButton) {
          		calendar.add(Calendar.WEEK_OF_YEAR, 1); // on incrémente
          		enabledButtons();
       
                  monthLabel.setText(getWeekLabel());
              	//tableModel.fireTableDataChanged(); 
              	tableModel.fireTableStructureChanged(); 
          		weekPanel.updateSelection();
              }
          }
    • pour que le weekPanel puisse faire la sélection et propager les mises à jour nécessaire (de la JTable, du calendar, des boutons), on ajoute une méthode :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      public void setWeek(int selection) {
      	calendar.set(Calendar.WEEK_OF_YEAR, selection);
      	enabledButtons();
              monthLabel.setText(getWeekLabel());
          	//tableModel.fireTableDataChanged(); 
          	tableModel.fireTableStructureChanged(); 
          	weekPanel.updateSelection();
      }
      En plus cette méthode permettra de sélectionner la semaine par le code (sans passer par l'interface graphique, mais en la mettant à jour)
    • accessoirement pour factoriser on peut appeler getWeekLabel() de weekPanel dans CalendarWeekViewer ( et supprimer les 2 constantes de format) :
      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
          private String getWeekLabel() {
       
          	Calendar calendar = Calendar.getInstance(); // on créé un nouveau calendar pour pas modifier le calendar qui nous sert pour savoir quelle semaine on affiche
          	calendar.setTime(this.calendar.getTime()); // on recopie dedans la date actuellement mise dans le calendar qui ser pour savoir quelle semaine on affiche
       
          	int week = calendar.get(Calendar.WEEK_OF_YEAR); // on récupère le numéro de la semaine
       
                  // le premier jour de cette semaine
          	Date premierJour = calendar.getTime();
      	int monthPremierJour = calendar.get(Calendar.MONTH);
       
              // le dernier jour de cette semaine
      	calendar.add(Calendar.WEEK_OF_YEAR, 1);
      	calendar.add(Calendar.DAY_OF_WEEK, -1);
      	Date dernierJour = calendar.getTime();
       
      	int monthDernierJour = calendar.get(Calendar.MONTH);
       
      	return WeekPanel.getWeekLabel(week, premierJour, dernierJour, monthPremierJour, monthDernierJour); 
      }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Ok
    Merci bien,

    Et je veux afficher ce planning pour une année de septembre à aout, c'est possible?

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu parles d'avoir de parcourir les semaines de septembre à août au lieu de janvier à décembre ? Oui, c'est possible, il suffit de parcourir les semaines de septembre à août, au lieu de janvier à décembre, et de changer la façon de gérer les bornes pour les boutons << et >>.

    Pour commencer la liste de semaines à la première de septembre, il faudra modifier la façon d'initialiser le début de notre liste de semaines :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // le calendar à l'initialisation contient la date du jour
    int month = calendar.get(Calendar.MONTH);
    if ( month<Calendar.SEPTEMBER ) { // si le mois courant est avant septembre
       // on doit passer à l'année d'avant pour commencer en septembre
       calendar.add(Calendar.YEAR, -1);
    }
     
    calendar.set(Calendar.MONTH,Calendar.SEPTEMBER); // on se positionne sur le mois de septembre (le début de notre liste de semaines)    	   calendar.set(Calendar.DAY_OF_WEEK,calendar.getMinimum(Calendar.DAY_OF_WEEK)); // on se positionne sur le premier jour de la semaine
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je revient vers toi car je ne vois pas ou je doit modifier le code pour commencer mon calendrier à partir de septembre et le finir en août

  18. #18
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je te l'ai dit pourtant.


    Je ne peux pas t'aider si tu ne comprends pas à quoi servent les différentes parties du code et pourquoi elles se trouvent là où elles se trouvent, et à quoi elles servent.

    A quoi sert ce code et que fait-il ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public CalendarWeekViewer() {
            super("Calendar Viewer");
     
            calendar = Calendar.getInstance();
     
            //calendar.set(Calendar.DAY_OF_MONTH, 0); // ça c'est ce qu'il y avait avant : on commençait au mois courant, et on choisissait le premier jour de ce mois
               calendar.set(Calendar.WEEK_OF_YEAR,calendar.getMinimum(Calendar.WEEK_OF_YEAR)); // on se positionne sur la première semaine de l'année
                    calendar.set(Calendar.DAY_OF_WEEK,calendar.getMinimum(Calendar.DAY_OF_WEEK)); // on se positionne sur le premier jour de la semaine
     
     
            dateFormatter = new SimpleDateFormat("MMMM yyyy");
     
            createComponents();
        }
    Et celui-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public WeekPanel(CalendarWeekViewer viewer, Calendar calendar) {
    		this.viewer=viewer;
    		this.calendar = calendar;
     
    		selection = calendar.get(Calendar.WEEK_OF_YEAR);
     
    		setLayout(new BorderLayout());
     
    		int premiereSemaine = calendar.getMinimum(Calendar.WEEK_OF_YEAR);
    		int derniereSemaine = calendar.getMaximum(Calendar.WEEK_OF_YEAR);
    Et ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // cette méthode permet d'empêcher les boutons de changer d'année
        private void enabledButtons() {
        	int curWeek = calendar.get(Calendar.WEEK_OF_YEAR);
    		boolean previousEnabled=true;
    		boolean nextEnabled=true;
    		if ( curWeek==calendar.getMinimum(Calendar.WEEK_OF_YEAR) ) {
    			previousEnabled=false;
        	}
    		if ( curWeek==calendar.getMaximum(Calendar.WEEK_OF_YEAR) ) {
    			nextEnabled=false;
        	}
    		prevButton.setEnabled(previousEnabled);
    		nextButton.setEnabled(nextEnabled);
        }
    Si tu comprends à quoi servent ces bouts de code, tu dois être capable d'appliquer ce que je t'ai indiqué pour changer un programme qui affiche les semaines de la première à la dernière de l'année en un programme qui affiche les semaines de la première de septembre à la dernière du mois d'août de l'année suivante (aussi faut-il comprendres les différences entre ces deux façons d'énumérer les semaines en dehors de toute notion de programmation).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #19
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    1: initialise le calendrier
    2: permet d'avoir la première et dernière semaine de l'année
    3 empêche de changer d'année si on est sur la première ou dernière semaine de l'année

    En plus, il y a un autre problème dans le code que tu m'a donner: les semaines vont du dimanche au samedi au lieu du lundi au dimanche et dans les colonnes c'est afficher que dimanche et non lundi, mardi, mercredi, ...

  20. #20
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totot Voir le message
    1: initialise le calendrier
    et le positionne sur la première semaine qu'on veut afficher
    Citation Envoyé par totot Voir le message
    2: permet d'avoir la première et dernière semaine de l'année
    Oui, mais pourquoi faire ? Parce qu'on veut la liste des semaines pour les afficher, et qu'on veut la liste de la première à la dernière de l'année
    Citation Envoyé par totot Voir le message
    3 empêche de changer d'année si on est sur la première ou dernière semaine de l'année
    Non : elle permet de gérer si un bouton suivant ou précédent est grisé, en fonction de la semaine actuellement affichée. Elle permet donc d'éviter qu'on sorte de l'intervalle de semaines qu'on gère.

    Donc, maintenant, si tu sais à quoi servent ces méthodes, tu sais où mettre le code (et adapter l'exemple que je t'ai donné) qui permet d'alleur de la première semaine de septembre à la dernière d'août, à la place de la première de l'année à la dernière de l'année.

    Citation Envoyé par totot Voir le message
    En plus, il y a un autre problème dans le code que tu m'a donner: les semaines vont du dimanche au samedi au lieu du lundi au dimanche et dans les colonnes c'est afficher que dimanche et non lundi, mardi, mercredi, ...
    C'est parce que j'initialise le premier jour de la semaine par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calendar.set(Calendar.DAY_OF_WEEK,calendar.getMinimum(Calendar.DAY_OF_WEEK))
    Pour l'initialiser au lundi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calendar.set(Calendar.DAY_OF_WEEK,calendar.MONDAY)
    Pour l'initialiser au jour officiel de début de la semaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calendar.set(Calendar.DAY_OF_WEEK,calendar.getFirstDayOfWeek())
    Attention, du coup, là où le dernier jour de la semaine est géré, il faudra changer la façon de le gérer (on ne va plus du minimul (dimanche) au maximul (samedi)). En particulier lorsqu'on parcourt les jours du premier au dernier de la semaine.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Peut-on faire du cluster avec winXP ?
    Par wikers dans le forum Windows XP
    Réponses: 37
    Dernier message: 02/06/2009, 11h13
  2. Problème unit CRT pour Faire du Pascal avec Delphi
    Par alexmorel dans le forum Débuter
    Réponses: 4
    Dernier message: 01/06/2004, 17h13
  3. [INDY] comment faire un 'POST' avec idHTTP??
    Par gamez dans le forum Composants VCL
    Réponses: 5
    Dernier message: 17/05/2004, 19h02
  4. Faire une JFrame avec LookAndFeel
    Par aburner dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/12/2003, 08h54
  5. faire des graphiques avec Perl
    Par And_the_problem_is dans le forum Modules
    Réponses: 2
    Dernier message: 16/07/2003, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo