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

AWT/Swing Java Discussion :

event sur JCalendar


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut event sur JCalendar
    Bonjour,

    Je suis en train de créer un agenda en java et après quelques recherche sur le net j'ai trouvé un code JCalendar.

    J'essaye en vain depuis quelques heures d'ajouter un listener à ce code afin d'afficher en console la date sur laquelle je clique.

    Pourriez-vous m'indiquer comment faire ?

    Voici le code en question :

    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    package test;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.DateFormatSymbols;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Locale;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
     
     
    @SuppressWarnings("serial")
    public class JCalendar
    extends JPanel {
     
        private Locale _locale = getDefaultLocale();
     
        private GregorianCalendar _calendar = new GregorianCalendar();
     
        private DateFormatSymbols _dateSymbols = new DateFormatSymbols();
     
        private SimpleDateFormat _formatMY = new SimpleDateFormat("MMMM yyyy");
     
        private int _firstDayOfWeek = _calendar.getFirstDayOfWeek();
     
        private final JLabel _monthYear = new JLabel("", SwingUtilities.CENTER);
     
        private final JLabel[] _daysOfWeek = new JLabel[7];
     
        private final JButton[] _daysNumber = new JButton[42];
     
        private final ActionListener _changeMonth = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
                final int nb = "next".equals(ae.getActionCommand()) ? 1: -1;
                _calendar.add(Calendar.MONTH, nb);
            updateMonthYear();
            updateDaysNumber();
            }
        };
     
        public JCalendar() {
            setLayout(new BorderLayout());
            // Month Panel
            final JPanel monthPanel = new JPanel();
            final JButton previous = new JButton("<<");
            previous.addActionListener(_changeMonth);
            final JButton next = new JButton(">>");
            next.addActionListener(_changeMonth);
            next.setActionCommand("next");
            _monthYear.setPreferredSize(new Dimension(120, 20));
            monthPanel.add(previous);
            monthPanel.add(_monthYear);
            monthPanel.add(next);
            add(monthPanel, BorderLayout.NORTH);
            // Day Panel
            final JPanel dayPanel = new JPanel();
            dayPanel.setLayout(new GridLayout(7, 7));
            for (int i = 0; i < 7; ++i)
                dayPanel.add(_daysOfWeek[i] = new JLabel("", SwingUtilities.CENTER));
            for (int i = 0; i < _daysNumber.length; ++i)
                dayPanel.add(_daysNumber[i] = new JButton());
            add(dayPanel, BorderLayout.CENTER);
            // Remplissage des composants
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
        }
     
        // Réactualise la locale et réaffiche le contenu des composants
        @SuppressWarnings("unused")
    	private void updateLocale(final Locale locale) {
            _locale = locale;
            final Date tmp = _calendar.getTime();
            _calendar = new GregorianCalendar(_locale);
            _calendar.setTime(tmp);
            _firstDayOfWeek = _calendar.getFirstDayOfWeek();
            _dateSymbols = new DateFormatSymbols(_locale);
            _formatMY = new SimpleDateFormat("MMMM yyyy", _locale);
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
        }
     
        // Affiche le mois et l'année en cours
        private void updateMonthYear() {
            _monthYear.setText(_formatMY.format(_calendar.getTime()));
        }
     
        // Affiche les jours de la semaine
        private void updateDaysOfWeek() {
            final String[] weekDays = _dateSymbols.getShortWeekdays();
            for (int i = 1; i < weekDays.length; ++i) {
                final int index = (i - 2 + _firstDayOfWeek) % 7 + 1;
                _daysOfWeek[i - 1].setText(weekDays[index]);
            }
        }
     
        // Affiche le numéro des jours
        private void updateDaysNumber() {
            final Date tmp = _calendar.getTime();
            _calendar.set(Calendar.DAY_OF_MONTH, 1);
            final int firstDay = _calendar.get(Calendar.DAY_OF_WEEK);
            final int LocalFirstDay = (firstDay - _firstDayOfWeek + 7) % 7 + 1;
            boolean full = false;
            for (int i = 0; i < _daysNumber.length; ++i) {
                //Détermine si le composant est affiché ou non
                final boolean isNotEmpty = i < LocalFirstDay - 1 || full;
                _daysNumber[i].setVisible(!isNotEmpty);
                // Affichage du jour
                if (!isNotEmpty) {
                    final int dayOfMonth = _calendar.get(Calendar.DAY_OF_MONTH);
                    _daysNumber[i].setText(String.valueOf(dayOfMonth));
                    _calendar.add(Calendar.DAY_OF_MONTH, 1);
                    full = 1 == _calendar.get(Calendar.DAY_OF_MONTH);
                }
            }
            _calendar.setTime(tmp);
        }
     
     
        public static void main(final String[] args)
        throws ParseException {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    final JFrame frame = new JFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.getContentPane().add(new JCalendar());
                    frame.pack();
                    frame.setVisible(true);
                }
            });
        }
    }
    Le but étant après d'afficher l'agenda du jour sur lequel on clique.

    Merci d'avance pour votre aide

  2. #2
    Membre expérimenté Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Par défaut
    Bonsoir,

    Il faut ajouter un listener pour tes boutons:
    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
     private final ActionListener _changeDay = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
                System.out.println(ae.getActionCommand());
            }
        };
     
    public JCalendar() {
    
            setLayout(new BorderLayout());
            // Month Panel
            final JPanel monthPanel = new JPanel();
            final JButton previous = new JButton("<<");
            previous.addActionListener(_changeMonth);
            final JButton next = new JButton(">>");
            next.addActionListener(_changeMonth);
            next.setActionCommand("next");
            _monthYear.setPreferredSize(new Dimension(120, 20));
            monthPanel.add(previous);
            monthPanel.add(_monthYear);
            monthPanel.add(next);
            add(monthPanel, BorderLayout.NORTH);
            // Day Panel
            final JPanel dayPanel = new JPanel();
            dayPanel.setLayout(new GridLayout(7, 7));
            for (int i = 0; i < 7; ++i){
                dayPanel.add(_daysOfWeek[i] = new JLabel("", SwingUtilities.CENTER));
            }
            for (int i = 0; i < _daysNumber.length; ++i){
                dayPanel.add(_daysNumber[i] = new JButton());
         _daysNumber[i].addActionListener(_changeDay);           
     }        add(dayPanel, BorderLayout.CENTER);
            // Remplissage des composants
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
    }

  3. #3
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Merci !

    J'arrive bien à récupérer le jour, j'essaye de faire de même pour le mois sans succès

    pourtant j'ai bien le listener qui était déjà fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        private final ActionListener _changeMonth = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
                final int nb = "next".equals(ae.getActionCommand()) ? 1: -1;
                _calendar.add(Calendar.MONTH, nb);
            updateMonthYear();
            updateDaysNumber();
            }
        };
    et qui est placé ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public JCalendar() {
            setLayout(new BorderLayout());
            // Month Panel
            final JPanel monthPanel = new JPanel();
            final JButton previous = new JButton("<<");
            previous.addActionListener(_changeMonth);
            final JButton next = new JButton(">>");
            next.addActionListener(_changeMonth);
            next.setActionCommand("next");
    ...
    ...
    ...
    Si je comprends bien il est censé s'activer lorsque l'on clique sur les boutons next et prévious j'ai donc simplement ajouter une ligne dans le listener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        private final ActionListener _changeMonth = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
                final int nb = "next".equals(ae.getActionCommand()) ? 1: -1;
                _calendar.add(Calendar.MONTH, nb);
            updateMonthYear();
            updateDaysNumber();
            System.out.println(ae.getActionCommand());
            }
        };
    mais rien ne se passe :s

  4. #4
    Membre expérimenté Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Par défaut
    Normalement en ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(ae.getActionCommand());
    ca doit affiché Next dans la console en cliqueant sur >> et << en cliquant sur <<

    Maintenant si tu veux afficher le mois remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(ae.getActionCommand());
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     System.out.println(_calendar.get(Calendar.MONTH));

  5. #5
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Bonjour,

    Merci pour votre aide !

    Rien de s'affiche en console, aussi bien avec System.out.println(ae.getActionCommand()); qu'avec System.out.println(_calendar.get(Calendar.MONTH));

    Même un basic System.out.println("coucou"); refuse de s'afficher :s

    Je ne comprends pas...

  6. #6
    Membre expérimenté Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Par défaut
    Montre nous le code après tes dernières modification

  7. #7
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Le voici :

    Il y a plusieurs tests avec un sysout mais seul celui qui affiche le jour fonctionne.

    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    package main;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.text.DateFormatSymbols;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Locale;
     
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
     
     
    @SuppressWarnings("serial")
    public class JCalendar
    extends JPanel {
     
        private Locale _locale = getDefaultLocale();
     
        private GregorianCalendar _calendar = new GregorianCalendar();
     
        private DateFormatSymbols _dateSymbols = new DateFormatSymbols();
     
        private SimpleDateFormat _formatMY = new SimpleDateFormat("MMMM yyyy");
     
        private int _firstDayOfWeek = _calendar.getFirstDayOfWeek();
     
        private final JLabel _monthYear = new JLabel("", SwingUtilities.CENTER);
     
        private final JLabel[] _daysOfWeek = new JLabel[7];
     
        private final JButton[] _daysNumber = new JButton[42];
     
        private final ActionListener _changeMonth = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
                final int nb = "next".equals(ae.getActionCommand()) ? 1: -1;
                _calendar.add(Calendar.MONTH, nb);
            System.out.println(_calendar.get(Calendar.MONTH));
            System.out.println("coucou _changeMonth");
            updateMonthYear();
            updateDaysNumber();
            }
        };
     
        private final ActionListener _changeDay = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
                System.out.println(ae.getActionCommand()); 
                System.out.println(_calendar.get(Calendar.MONTH));
                System.out.println("coucou _changeDay");
            }
        };
     
     
     
        public JCalendar() {
            setLayout(new BorderLayout());
            // Month Panel
            final JPanel monthPanel = new JPanel();
            final JButton previous = new JButton("<<");
            previous.addActionListener(_changeMonth);
            final JButton next = new JButton(">>");
            next.addActionListener(_changeMonth);
            next.setActionCommand("next");
            _monthYear.setPreferredSize(new Dimension(120, 20));
            monthPanel.add(previous);
            monthPanel.add(_monthYear);
            monthPanel.add(next);
            add(monthPanel, BorderLayout.NORTH);
            // Day Panel
            final JPanel dayPanel = new JPanel();
            dayPanel.setLayout(new GridLayout(7, 7));
            for (int i = 0; i < 7; ++i)
                dayPanel.add(_daysOfWeek[i] = new JLabel("", SwingUtilities.CENTER));
            for (int i = 0; i < _daysNumber.length; ++i) {
                dayPanel.add(_daysNumber[i] = new JButton());
                _daysNumber[i].addActionListener(_changeDay);  
            }
            add(dayPanel, BorderLayout.CENTER);
            // Remplissage des composants
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
            addMouseListener(new MouseAdapter(){
    			//clic de la souris
    			public void mouseClicked(MouseEvent e) {
    				System.out.println("coucou");
    			}
    		});
        }
     
        // Réactualise la locale et réaffiche le contenu des composants
        @SuppressWarnings("unused")
    	private void updateLocale(final Locale locale) {
            _locale = locale;
            final Date tmp = _calendar.getTime();
            _calendar = new GregorianCalendar(_locale);
            _calendar.setTime(tmp);
            _firstDayOfWeek = _calendar.getFirstDayOfWeek();
            _dateSymbols = new DateFormatSymbols(_locale);
            _formatMY = new SimpleDateFormat("MMMM yyyy", _locale);
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
        }
     
        // Affiche le mois et l'année en cours
        private void updateMonthYear() {
            _monthYear.setText(_formatMY.format(_calendar.getTime()));
        }
     
        // Affiche les jours de la semaine
        private void updateDaysOfWeek() {
            final String[] weekDays = _dateSymbols.getShortWeekdays();
            for (int i = 1; i < weekDays.length; ++i) {
                final int index = (i - 2 + _firstDayOfWeek) % 7 + 1;
                _daysOfWeek[i - 1].setText(weekDays[index]);
            }
        }
     
        // Affiche le numéro des jours
        private void updateDaysNumber() {
            final Date tmp = _calendar.getTime();
            _calendar.set(Calendar.DAY_OF_MONTH, 1);
            final int firstDay = _calendar.get(Calendar.DAY_OF_WEEK);
            final int LocalFirstDay = (firstDay - _firstDayOfWeek + 7) % 7 + 1;
            boolean full = false;
            for (int i = 0; i < _daysNumber.length; ++i) {
                //Détermine si le composant est affiché ou non
                final boolean isNotEmpty = i < LocalFirstDay - 1 || full;
                _daysNumber[i].setVisible(!isNotEmpty);
                // Affichage du jour
                if (!isNotEmpty) {
                    final int dayOfMonth = _calendar.get(Calendar.DAY_OF_MONTH);
                    _daysNumber[i].setText(String.valueOf(dayOfMonth));
                    _calendar.add(Calendar.DAY_OF_MONTH, 1);
                    full = 1 == _calendar.get(Calendar.DAY_OF_MONTH);
                }
            }
            _calendar.setTime(tmp);
        }
     
    }

    Je ne sais pas si c'est important mais j’appelle JCalendar a partir de cette 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
     
    package main;
     
    import java.awt.Toolkit;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
     
    import test.JCalendar;
     
    @SuppressWarnings("serial")
    public class FenPrincipale extends JFrame {
     
    	private JPanel contentPane;
    	private JPanel JPanel_Calendrier;
    	private JLabel jLab_Cadre;
     
    	//Constructeur
    	public FenPrincipale() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 1580, 850);
    		setLocationRelativeTo(null);
    		setResizable(false);
    		setTitle("Time Sheet");
    		setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/logo.gif")));
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
    		contentPane.add(getJPanel_Calendrier());
    		contentPane.add(getJLab_Cadre());
    	}
     
     
    	//Label fond d'écran
    	private JLabel getJLab_Cadre() {
    		if (jLab_Cadre == null) {
    			jLab_Cadre = new JLabel("");
    			jLab_Cadre.setBounds(0, 0, 1580, 850);
    			jLab_Cadre.setIcon(new ImageIcon(FenPrincipale.class.getResource("/images/fonds/fond3.png")));
    		}
    		return jLab_Cadre;
    	}
     
    	//Jpanel contenant le calendrier
    	private JPanel getJPanel_Calendrier() {
    		if (JPanel_Calendrier == null) {
    			JPanel_Calendrier = new JPanel();
    			JPanel_Calendrier.setBounds(10, 10, 340, 200);
    			JPanel_Calendrier.add(new JCalendar());
    		}
    		return JPanel_Calendrier;
    	}
    }

  8. #8
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Trouvé !

    J'ai honte

    Le fait d'avoir mis la classe FenPrincipale dans mon précédent post m'a permit de trouver l'erreur à la relecture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import test.JCalendar;
    un package de test qui me sert pour... mes tests ^^

    Et donc normal que rien ne fonctionnait puisque je faisais les modifs dans le package main mais lui il chargeait celui du package test...

    Le soucis c'est que je n'ai jamais écris cette ligne, je ne sais pas comment elle est arrivée là :s

    EDIT :

    Pour conclure et mettre en résolu, voici finalement le listener final pour récupérer la date entière (que j'ai renommé en _getDate) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        private final ActionListener _getDate = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
            	int day = Integer.parseInt(ae.getActionCommand());
            	int month = _calendar.get(Calendar.MONTH);
            	int year = _calendar.get(Calendar.YEAR);
            	System.out.println(day + "/" + (month +1) + "/" + year);
            }
        };

  9. #9
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Bonjour,

    Nouveau problème mais je continue ici plutôt que de créer un nouveau topic car c'est dans la continuité.

    J'ai une classe GrilleJournaliere dans laquelle j'ai un JTextField pour tester d'envoyé la date sur laquelle on clique et de l'afficher dont voici le 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
    67
    68
     
    package main;
     
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JPanel;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.SwingConstants;
    import javax.swing.JButton;
     
    @SuppressWarnings("serial")
    public class GrilleJournaliere extends JPanel {
    	private JTable table;
    	private JTextField JTxT_Date;
    	private JButton btnNewButton;
     
    	public GrilleJournaliere() {
    		setLayout(null);
    		setBounds(360, 10, 1204, 801);
    		add(getJTxT_Date());
    		add(getBtnNewButton());
    		add(getTable());
     
    	}
     
    	//table contenant les grilles
    	private JTable getTable() {
    		if (table == null) {
    			table = new JTable();
    			table.setBackground(Color.WHITE);
    			table.setBounds(0, 0, 1204, 801);
    		}
    		return table;
    	}
     
    	//JTextField Date
    	private JTextField getJTxT_Date() {
    		if (JTxT_Date == null) {
    			JTxT_Date = new JTextField();
    			JTxT_Date.setHorizontalAlignment(SwingConstants.CENTER);
    			JTxT_Date.setText("Cliquez sur un jour");
    			JTxT_Date.setBounds(502, 11, 200, 20);
    			JTxT_Date.setColumns(10);
    		}
    		return JTxT_Date;
    	}
     
    	//setter du textField Date
    	public void setJTxT_Date(int day, int month, int year) {
    		JTxT_Date.setText(day + "/" + (month +1) + "/" + year);
    	}
     
    	private JButton getBtnNewButton() {
    		if (btnNewButton == null) {
    			btnNewButton = new JButton("New button");
    			btnNewButton.setBounds(562, 256, 89, 23);
    			btnNewButton.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					setJTxT_Date(1, 5, 13);
    				}
    			});
    		}
    		return btnNewButton;
    	}
    }
    le boutons je l'ai ajouté pour m'assurer que le setter fonctionne, ce qui est le cas.

    Dans ma classe JCalendar j'ai donc ajouté deux lignes dans le listener pour envoyé la date dans le JTextField :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GrilleJournaliere GJ = new GrilleJournaliere();
    GJ.setJTxT_Date(day, month, year);
    Je remet le code entier de cette 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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
     
    package main;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.DateFormatSymbols;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Locale;
     
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
     
     
    @SuppressWarnings("serial")
    public class JCalendar
    extends JPanel {
     
        private Locale _locale = getDefaultLocale();
     
        private GregorianCalendar _calendar = new GregorianCalendar();
     
        private DateFormatSymbols _dateSymbols = new DateFormatSymbols();
     
        private SimpleDateFormat _formatMY = new SimpleDateFormat("MMMM yyyy");
     
        private int _firstDayOfWeek = _calendar.getFirstDayOfWeek();
     
        private final JLabel _monthYear = new JLabel("", SwingUtilities.CENTER);
     
        private final JLabel[] _daysOfWeek = new JLabel[7];
     
        private final JButton[] _daysNumber = new JButton[42];
     
        private final ActionListener _changeMonth = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
                final int nb = "next".equals(ae.getActionCommand()) ? 1: -1;
                _calendar.add(Calendar.MONTH, nb);
            updateMonthYear();
            updateDaysNumber();
            }
        };
     
        private final ActionListener _getDate = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
            	int day = Integer.parseInt(ae.getActionCommand());
            	int month = _calendar.get(Calendar.MONTH);
            	int year = _calendar.get(Calendar.YEAR);
            	System.out.println(day + "/" + (month +1) + "/" + year);
            	GrilleJournaliere GJ = new GrilleJournaliere();
            	GJ.setJTxT_Date(day, month, year);
            }
        };
     
     
     
        public JCalendar() {
            setLayout(new BorderLayout());
            // Month Panel
            final JPanel monthPanel = new JPanel();
            final JButton previous = new JButton("<<");
            previous.addActionListener(_changeMonth);
            final JButton next = new JButton(">>");
            next.addActionListener(_changeMonth);
            next.setActionCommand("next");
            _monthYear.setPreferredSize(new Dimension(120, 20));
            monthPanel.add(previous);
            monthPanel.add(_monthYear);
            monthPanel.add(next);
            monthPanel.setOpaque(false);
            add(monthPanel, BorderLayout.NORTH);
            // Day Panel
            final JPanel dayPanel = new JPanel();
            dayPanel.setLayout(new GridLayout(7, 7));
            for (int i = 0; i < 7; ++i)
                dayPanel.add(_daysOfWeek[i] = new JLabel("", SwingUtilities.CENTER));
            for (int i = 0; i < _daysNumber.length; ++i) {
                dayPanel.add(_daysNumber[i] = new JButton());
                _daysNumber[i].addActionListener(_getDate);  
            }
            add(dayPanel, BorderLayout.CENTER);
            // Remplissage des composants
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
        }
     
        // Réactualise la locale et réaffiche le contenu des composants
        @SuppressWarnings("unused")
    	private void updateLocale(final Locale locale) {
            _locale = locale;
            final Date tmp = _calendar.getTime();
            _calendar = new GregorianCalendar(_locale);
            _calendar.setTime(tmp);
            _firstDayOfWeek = _calendar.getFirstDayOfWeek();
            _dateSymbols = new DateFormatSymbols(_locale);
            _formatMY = new SimpleDateFormat("MMMM yyyy", _locale);
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
        }
     
        // Affiche le mois et l'année en cours
        private void updateMonthYear() {
            _monthYear.setText(_formatMY.format(_calendar.getTime()));
        }
     
        // Affiche les jours de la semaine
        private void updateDaysOfWeek() {
            final String[] weekDays = _dateSymbols.getShortWeekdays();
            for (int i = 1; i < weekDays.length; ++i) {
                final int index = (i - 2 + _firstDayOfWeek) % 7 + 1;
                _daysOfWeek[i - 1].setText(weekDays[index]);
            }
        }
     
        // Affiche le numéro des jours
        private void updateDaysNumber() {
            final Date tmp = _calendar.getTime();
            _calendar.set(Calendar.DAY_OF_MONTH, 1);
            final int firstDay = _calendar.get(Calendar.DAY_OF_WEEK);
            final int LocalFirstDay = (firstDay - _firstDayOfWeek + 7) % 7 + 1;
            boolean full = false;
            for (int i = 0; i < _daysNumber.length; ++i) {
                //Détermine si le composant est affiché ou non
                final boolean isNotEmpty = i < LocalFirstDay - 1 || full;
                _daysNumber[i].setVisible(!isNotEmpty);
                // Affichage du jour
                if (!isNotEmpty) {
                    final int dayOfMonth = _calendar.get(Calendar.DAY_OF_MONTH);
                    _daysNumber[i].setText(String.valueOf(dayOfMonth));
                    _calendar.add(Calendar.DAY_OF_MONTH, 1);
                    full = 1 == _calendar.get(Calendar.DAY_OF_MONTH);
                }
            }
            _calendar.setTime(tmp);
        }
     
    }
    Le sysout dans JCalendar fonctionne à la perfection et la date sur laquelle on clique s'affiche bien dans la console. En cliquant sur le bouton je met bien à jour le texte du JTextField ce qui prouve que mon setter fonctionne correctement. Pourtant, lorsque je l’appelle depuis JCalendar rien ne se passe :s

    Merci d'avance pour l'aide apportée

  10. #10
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Je viens de passer 4 heures là dessus à coup de setVisible, updateUI, faire un JFrame au lieu d'un JPanel, et j'en passe.

    J'ai rajouté un JTextField dans le même Panel que le calendrier et là j'y envoie la date sans problème mais impossible de l'envoyer dans le Jpanel "GrilleJournaliere"

    Je suis presque sûr qu'il s'agit d'un problème de rafraîchissement du JPanel mais je n'arrive pas à le résoudre

  11. #11
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Bonjour,

    J'ai retravaillé tout mon code et voilà ou j'en suis aujourd'hui :

    j'ai une classe FenPrincipale, un Jframe dans lequel j'importe 2 JPanel :

    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
     
    package main;
     
    import java.awt.Color;
    import java.awt.Toolkit;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
     
     
     
    @SuppressWarnings("serial")
    public class FenPrincipale extends JFrame {
     
    	private JPanel contentPane;
    	private JLabel jLab_Cadre;
    	GrilleJournaliere GJ = new GrilleJournaliere();
    	JCalendar calendar = new JCalendar();
     
    	//Constructeur
    	public FenPrincipale() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 1580, 850);
    		setLocationRelativeTo(null);
    		setResizable(false);
    		setTitle("Time Sheet par Marco Di Toro");
    		setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/logo.gif")));
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
    		calendar.setBounds(10, 10, 350, 225);
    		contentPane.add(calendar);
    		GJ.setBounds(378, 10, 1186, 801);
    		contentPane.add(GJ);
    		calendar.setBackground(Color.LIGHT_GRAY);
    		contentPane.add(getJLab_Cadre());
    	}	
     
    	//Label fond d'écran
    	private JLabel getJLab_Cadre() {
    		if (jLab_Cadre == null) {
    			jLab_Cadre = new JLabel("");
    			jLab_Cadre.setBounds(0, 0, 1580, 850);
    			jLab_Cadre.setIcon(new ImageIcon(FenPrincipale.class.getResource("/images/fonds/fond3.png")));
    		}
    		return jLab_Cadre;
    	}
     
    }
    plus concis et plus simple qu'avant

    voici les classes des 2 Jpanel :

    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    package main;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.DateFormatSymbols;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Locale;
     
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
     
     
    @SuppressWarnings("serial")
    public class JCalendar
    extends JPanel {
     
    	private Locale _locale = getDefaultLocale();
     
        private GregorianCalendar _calendar = new GregorianCalendar();
     
        private DateFormatSymbols _dateSymbols = new DateFormatSymbols();
     
        private SimpleDateFormat _formatMY = new SimpleDateFormat("MMMM yyyy");
     
        private int _firstDayOfWeek = _calendar.getFirstDayOfWeek();
     
        private final JLabel _monthYear = new JLabel("", SwingUtilities.CENTER);
     
        private final JLabel[] _daysOfWeek = new JLabel[7];
     
        private final JButton[] _daysNumber = new JButton[42];
     
     
        private final ActionListener _changeMonth = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
                final int nb = "next".equals(ae.getActionCommand()) ? 1: -1;
                _calendar.add(Calendar.MONTH, nb);
            updateMonthYear();
            updateDaysNumber();
            }
        };
     
     
        private final ActionListener _getDate = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
            	int day = Integer.parseInt(ae.getActionCommand());
            	int month = _calendar.get(Calendar.MONTH);
            	int year = _calendar.get(Calendar.YEAR);
            	System.out.println(day + "/" + (month +1) + "/" + year);
            }
        };
     
     
        public JCalendar() {
            setLayout(new BorderLayout());
            // Month Panel
            final JPanel monthPanel = new JPanel();
            final JButton previous = new JButton("<<");
            previous.addActionListener(_changeMonth);
            final JButton next = new JButton(">>");
            next.addActionListener(_changeMonth);
            next.setActionCommand("next");
            //add(getJTxT_Date());
            _monthYear.setPreferredSize(new Dimension(120, 20));
            monthPanel.add(previous);
            monthPanel.add(_monthYear);
            monthPanel.add(next);
            monthPanel.setOpaque(false);
            add(monthPanel, BorderLayout.NORTH);
            // Day Panel
            final JPanel dayPanel = new JPanel();
            dayPanel.setLayout(new GridLayout(7, 7));
            for (int i = 0; i < 7; ++i)
                dayPanel.add(_daysOfWeek[i] = new JLabel("", SwingUtilities.CENTER));
            for (int i = 0; i < _daysNumber.length; ++i) {
                dayPanel.add(_daysNumber[i] = new JButton());
                _daysNumber[i].addActionListener(_getDate);  
            }
            add(dayPanel, BorderLayout.CENTER);
            dayPanel.setBackground(Color.WHITE);
            // Remplissage des composants
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
        }
     
    	// Réactualise la locale et réaffiche le contenu des composants
        @SuppressWarnings("unused")
    	private void updateLocale(final Locale locale) {
            _locale = locale;
            final Date tmp = _calendar.getTime();
            _calendar = new GregorianCalendar(_locale);
            _calendar.setTime(tmp);
            _firstDayOfWeek = _calendar.getFirstDayOfWeek();
            _dateSymbols = new DateFormatSymbols(_locale);
            _formatMY = new SimpleDateFormat("MMMM yyyy", _locale);
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
        }
     
        // Affiche le mois et l'année en cours
        private void updateMonthYear() {
            _monthYear.setText(_formatMY.format(_calendar.getTime()));
        }
     
        // Affiche les jours de la semaine
        private void updateDaysOfWeek() {
            final String[] weekDays = _dateSymbols.getShortWeekdays();
            for (int i = 1; i < weekDays.length; ++i) {
                final int index = (i - 2 + _firstDayOfWeek) % 7 + 1;
                _daysOfWeek[i - 1].setText(weekDays[index]);
            }
        }
     
        // Affiche le numéro des jours
        private void updateDaysNumber() {
            final Date tmp = _calendar.getTime();
            _calendar.set(Calendar.DAY_OF_MONTH, 1);
            final int firstDay = _calendar.get(Calendar.DAY_OF_WEEK);
            final int LocalFirstDay = (firstDay - _firstDayOfWeek + 7) % 7 + 1;
            boolean full = false;
            for (int i = 0; i < _daysNumber.length; ++i) {
                //Détermine si le composant est affiché ou non
                final boolean isNotEmpty = i < LocalFirstDay - 1 || full;
                _daysNumber[i].setVisible(!isNotEmpty);
                // Affichage du jour
                if (!isNotEmpty) {
                    final int dayOfMonth = _calendar.get(Calendar.DAY_OF_MONTH);
                    _daysNumber[i].setText(String.valueOf(dayOfMonth));
                    _calendar.add(Calendar.DAY_OF_MONTH, 1);
                    full = 1 == _calendar.get(Calendar.DAY_OF_MONTH);
                }
            }
            _calendar.setTime(tmp);
        }
     
    }
    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
     
    package main;
     
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.SwingConstants;
     
    @SuppressWarnings("serial")
    public class GrilleJournaliere extends JPanel {
    	private JTable table;
    	private JTextField JTxT_Date;
    	private JButton btnNewButton;
     
     
    	public GrilleJournaliere() {
    		setLayout(null);
    		setBounds(360, 10, 1204, 801);
    		add(getJTxT_Date());
    		add(getBtnNewButton());
    		add(getTable());
     
    	}
     
    	//table contenant les grilles
    	private JTable getTable() {
    		if (table == null) {
    			table = new JTable();
    			table.setBackground(Color.WHITE);
    			table.setBounds(0, 0, 1204, 801);
    		}
    		return table;
    	}
     
    	//JTextField Date
    	private JTextField getJTxT_Date() {
    		if (JTxT_Date == null) {
    			JTxT_Date = new JTextField();
    			JTxT_Date.setHorizontalAlignment(SwingConstants.CENTER);
    			JTxT_Date.setText("Cliquez sur un jour");
    			JTxT_Date.setBounds(502, 11, 200, 20);
    			JTxT_Date.setColumns(10);
    		}
    		return JTxT_Date;
    	}
     
    	//setter du textField Date
    	public void setJTxT_Date(int day, int month, int year) {
    		JTxT_Date.setText(day + "/" + (month +1) + "/" + year);
    		System.out.println("je suis dans setTxT_Date");
    	}
     
    	private JButton getBtnNewButton() {
    		if (btnNewButton == null) {
    			btnNewButton = new JButton("New button");
    			btnNewButton.setBounds(562, 256, 89, 23);
    			btnNewButton.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					setJTxT_Date(1, 5, 13);
    				}
    			});
    		}
    		return btnNewButton;
    	}
     
    }
    La grande question est : Comment faire pour que le listener _getDate soit "entendu" dans ma classe FenPrincipale pour pouvoir envoyé le résultat dans GrilleJournaliere ?

    J'ai essayé un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    calendar.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent e) {
                            System.out.println("Je suis cliqué !");
    			}
    		});
    dans le constructeur de FenPrincipale mais il ne fonctionne que si on clique à côté des boutons... pas très pratique...

    Donc comment déclencher un event dans FenPrincipale en cliquant sur les boutons dans JCalendar afin que je puisse récupérer la date sur laquelle on a cliqué et l'envoyer dans dans GrilleJournaliere ?

    Merci d'avance pour l'aide apportée

  12. #12
    Membre expérimenté Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Par défaut
    Est ce que tu peux mettre le main ?

  13. #13
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Bien sûr

    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
     
    package main;
     
    import java.awt.EventQueue;
     
    public class Main {
     
    	/**
             * @param args
             */	
    	public static void main(String[] args) {
     
    		//Lancement de la fenetre de connexion
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					FenConnexion frame = new FenConnexion();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    		//fin lancement fenetre de connexion
     
    	}
     
    }
    le main appelle FenConnexion

    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
     
    package main;
     
    //importation
    //-----------
    import java.awt.Cursor;
    import java.awt.Font;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
     
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    import javax.swing.border.EmptyBorder;
     
     
     
    @SuppressWarnings("serial")
    public class FenConnexion extends JFrame {
     
     
    	//Propriétés graphiques
    	//---------------------
    	private JLabel jLab_Cadre;
    	private JPanel contentPane;
    	private JButton jBtn_Valider;
    	private JLabel JLab_Ordinateur;
    	private JTextField JTxT_Nom;
    	private JPasswordField JPwd_MDP;
    	private JLabel JLab_CreerCompte;
    	private JButton jBtn_Quitter;
    	private JLabel jLab_Nom;
    	private JLabel jLab_MDP;
     
     
    	//Constructeur
    	//------------
    	public FenConnexion() {
    		contentPane = new JPanel();
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		contentPane.setLayout(null);
    		//titre
    		setTitle("Time Sheet par Marco Di Toro");
    		//Pour remplacer l'icone de la barre de fenètre
    		setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/logo.gif")));
    		//pour centrer la fenetre
    		setLocationRelativeTo(null);
    		contentPane.add(getJBtn_Valider());
    		contentPane.add(getJLab_Ordinateur());
    		contentPane.add(getJTxT_Nom());
    		contentPane.add(getJPwd_MDP());
    		contentPane.add(getJLab_CreerCompte());
    		contentPane.add(getJBtn_Quitter());
    		contentPane.add(getJLab_Nom());
    		contentPane.add(getJLab_MDP());
    		contentPane.add(getJLab_Cadre());
    		//bouton ayant le focus par défaut
    		getRootPane().setDefaultButton(jBtn_Valider);
    		setResizable(false);
    		setContentPane(contentPane);
    	}
     
     
    	//Getters des Widgets
    	//===================
    	//Labels sans action
    	//------------------
    	//Label écran ordinateur
    	private JLabel getJLab_Ordinateur() {
    		if (JLab_Ordinateur == null) {
    			JLab_Ordinateur = new JLabel(" Connexion au programme");
    			JLab_Ordinateur.setBounds(5, 10, 400, 74);
    			JLab_Ordinateur.setFont(new Font("Segoe UI", Font.PLAIN, 24));
    			JLab_Ordinateur.setIcon(new ImageIcon(FenConnexion.class.getResource("/images/connexion/ecran.png")));
    		}
    		return JLab_Ordinateur;
    	}
     
    	//Label Nom d'utilisateur
    	private JLabel getJLab_Nom() {
    		if (jLab_Nom == null) {
    			jLab_Nom = new JLabel("Nom d'utilisateur");
    			jLab_Nom.setFont(new Font("Segoe UI", Font.PLAIN, 12));
    			jLab_Nom.setBounds(56, 95, 150, 20);
    			jLab_Nom.setIcon(new ImageIcon(FenConnexion.class.getResource("/images/connexion/utilisateur.png")));
    		}
    		return jLab_Nom;
    	}
     
    	//Label Mot de passe
    	private JLabel getJLab_MDP() {
    		if (jLab_MDP == null) {
    			jLab_MDP = new JLabel("Mot de passe");
    			jLab_MDP.setFont(new Font("Segoe UI", Font.PLAIN, 12));
    			jLab_MDP.setBounds(56, 140, 150, 20);
    			jLab_MDP.setIcon(new ImageIcon(FenConnexion.class.getResource("/images/connexion/key.png")));
    		}
    		return jLab_MDP;
    	}
     
    	//Label fond d'écran
    	private JLabel getJLab_Cadre() {
    		if (jLab_Cadre == null) {
    			jLab_Cadre = new JLabel("");
    			jLab_Cadre.setBounds(10, 25, 409, 180);
    			jLab_Cadre.setIcon(new ImageIcon(FenConnexion.class.getResource("/images/connexion/ban.png")));
    		}
    		return jLab_Cadre;
    	}
     
    	//TextField pour la saisie du nom
    	private JTextField getJTxT_Nom() {
    		if (JTxT_Nom == null) {
    			JTxT_Nom = new JTextField("");
    			JTxT_Nom.setBounds(206, 95, 200, 20);
    			JTxT_Nom.setColumns(10);
    		}
    		return JTxT_Nom;
    	}
     
     
    	private JPasswordField getJPwd_MDP() {
    		if (JPwd_MDP == null) {
    			JPwd_MDP = new JPasswordField("");
    			JPwd_MDP.setBounds(206, 140, 200, 20);
    			JPwd_MDP.setColumns(10);
    		}
    		return JPwd_MDP;
    	}
     
    	//Label pour accéder à la fenètre de création de compte
    	private JLabel getJLab_CreerCompte() {
    		if (JLab_CreerCompte == null) {
    			JLab_CreerCompte = new JLabel("Créer un compte");
    			JLab_CreerCompte.addMouseListener(new MouseAdapter(){
    				//clic de la souris
    				public void mouseClicked(MouseEvent e) {
    					FenCreerCompte newAccount = new FenCreerCompte();
    					newAccount.setVisible(true);
    					dispose();
    				}
    			});
    			JLab_CreerCompte.setFont(new Font("Segoe UI", Font.PLAIN, 12));
    			JLab_CreerCompte.setBounds(12, 216, 188, 28);
    			JLab_CreerCompte.setIcon(new ImageIcon(FenConnexion.class.getResource("/images/connexion/new_account.gif")));
    			//Pour avoir le pointeur souris sous forme de main
    			JLab_CreerCompte.setCursor(new Cursor(Cursor.HAND_CURSOR));
    		}
    		return JLab_CreerCompte;
    	}
     
    	//Boutons
    	//-------
    	//Bouton valider
    	private JButton getJBtn_Valider() {
    		if (jBtn_Valider == null) {
    			jBtn_Valider = new JButton("Valider");
    			jBtn_Valider.addActionListener(new ActionListener() {
    				@SuppressWarnings("deprecation")
    				public void actionPerformed(ActionEvent e) {
    					verifUtilisateur log = new verifUtilisateur();
    					log.connexion(getJTxT_Nom().getText(), getJPwd_MDP().getText());
    					if (log.connexionOk == true) {
    						FenPrincipale fenPrincipale = new FenPrincipale();
    						fenPrincipale.setVisible(true);
    						dispose();
    					}
    				}
    			});
    			jBtn_Valider.setFont(new Font("Segoe UI", Font.PLAIN, 12));
    			jBtn_Valider.setBounds(200, 216, 100, 23);
    			jBtn_Valider.setIcon(new ImageIcon(FenConnexion.class.getResource("/images/connexion/valider.png")));
    			//Pour avoir le pointeur souris sous forme de main
    			jBtn_Valider.setCursor(new Cursor(Cursor.HAND_CURSOR));
    		}
    		return jBtn_Valider;
    	}
     
    	//Bouton Quitter
    	private JButton getJBtn_Quitter() {
    		if (jBtn_Quitter == null) {
    			jBtn_Quitter = new JButton("Quitter");
    			jBtn_Quitter.addActionListener(new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					System.exit(0);
    				}
    			});
    			jBtn_Quitter.addKeyListener(new KeyAdapter() {
    				public void keyPressed(KeyEvent e) {
    					if(e.getKeyCode() == 10){
    						System.exit(0);
    					}
    				}
    			});
    			jBtn_Quitter.setFont(new Font("Segoe UI", Font.PLAIN, 12));
    			jBtn_Quitter.setBounds(306, 216, 100, 23);
    			jBtn_Quitter.setIcon(new ImageIcon(FenConnexion.class.getResource("/images/connexion/cancel.png")));
    			//Pour avoir le pointeur souris sous forme de main
    			jBtn_Quitter.setCursor(new Cursor(Cursor.HAND_CURSOR));
    		}
    		return jBtn_Quitter;
    	}
     
    }
    et celle-ci appelle FenPrincipale

    Voici en image la fenêtre principale :


  14. #14
    Membre expérimenté Avatar de hbennou
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 162
    Par défaut
    J'ai modifié ta conception car avec la tienne je ne pense pas qu'il y aura une solution:
    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
    123
    124
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.DateFormatSymbols;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Locale;
     
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
     
     
    @SuppressWarnings("serial")
    public class JCalendar
    extends JPanel {
     
        private Locale _locale = getDefaultLocale();
     
        public GregorianCalendar _calendar = new GregorianCalendar();
     
        private DateFormatSymbols _dateSymbols = new DateFormatSymbols();
     
        private SimpleDateFormat _formatMY = new SimpleDateFormat("MMMM yyyy");
     
        private int _firstDayOfWeek = _calendar.getFirstDayOfWeek();
     
        private final JLabel _monthYear = new JLabel("", SwingUtilities.CENTER);
     
        private final JLabel[] _daysOfWeek = new JLabel[7];
     
        public final JButton[] _daysNumber = new JButton[42];
     
        public final JButton previous = new JButton("<<");
     
        public final JButton next = new JButton(">>");
     
        public JCalendar() {
            setLayout(new BorderLayout());
            // Month Panel
            final JPanel monthPanel = new JPanel();
            next.setActionCommand("next");
            //add(getJTxT_Date());
            _monthYear.setPreferredSize(new Dimension(120, 20));
            monthPanel.add(previous);
            monthPanel.add(_monthYear);
            monthPanel.add(next);
            monthPanel.setOpaque(false);
            add(monthPanel, BorderLayout.NORTH);
            // Day Panel
            final JPanel dayPanel = new JPanel();
            dayPanel.setLayout(new GridLayout(7, 7));
            for (int i = 0; i < 7; ++i)
                dayPanel.add(_daysOfWeek[i] = new JLabel("", SwingUtilities.CENTER));
            for (int i = 0; i < _daysNumber.length; ++i) {
                dayPanel.add(_daysNumber[i] = new JButton());
            }
            add(dayPanel, BorderLayout.CENTER);
            dayPanel.setBackground(Color.WHITE);
            // Remplissage des composants
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
     
        }
     
    	// Réactualise la locale et réaffiche le contenu des composants
        @SuppressWarnings("unused")
    	private void updateLocale(final Locale locale) {
            _locale = locale;
            final Date tmp = _calendar.getTime();
            _calendar = new GregorianCalendar(_locale);
            _calendar.setTime(tmp);
            _firstDayOfWeek = _calendar.getFirstDayOfWeek();
            _dateSymbols = new DateFormatSymbols(_locale);
            _formatMY = new SimpleDateFormat("MMMM yyyy", _locale);
            updateMonthYear();
            updateDaysOfWeek();
            updateDaysNumber();
        }
     
        // Affiche le mois et l'année en cours
        public void updateMonthYear() {
            _monthYear.setText(_formatMY.format(_calendar.getTime()));
        }
     
        // Affiche les jours de la semaine
        private void updateDaysOfWeek() {
            final String[] weekDays = _dateSymbols.getShortWeekdays();
            for (int i = 1; i < weekDays.length; ++i) {
                final int index = (i - 2 + _firstDayOfWeek) % 7 + 1;
                _daysOfWeek[i - 1].setText(weekDays[index]);
            }
        }
     
        // Affiche le numéro des jours
        public void updateDaysNumber() {
            final Date tmp = _calendar.getTime();
            _calendar.set(Calendar.DAY_OF_MONTH, 1);
            final int firstDay = _calendar.get(Calendar.DAY_OF_WEEK);
            final int LocalFirstDay = (firstDay - _firstDayOfWeek + 7) % 7 + 1;
            boolean full = false;
            for (int i = 0; i < _daysNumber.length; ++i) {
                //Détermine si le composant est affiché ou non
                final boolean isNotEmpty = i < LocalFirstDay - 1 || full;
                _daysNumber[i].setVisible(!isNotEmpty);
                // Affichage du jour
                if (!isNotEmpty) {
                    final int dayOfMonth = _calendar.get(Calendar.DAY_OF_MONTH);
                    _daysNumber[i].setText(String.valueOf(dayOfMonth));
                    _calendar.add(Calendar.DAY_OF_MONTH, 1);
                    full = 1 == _calendar.get(Calendar.DAY_OF_MONTH);
                }
            }
            _calendar.setTime(tmp);
        }
     
    }
    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
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Calendar;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
     
     
     
    @SuppressWarnings("serial")
    public class FenPrincipale extends JFrame {
     
    	private JPanel contentPane;
    	private JLabel jLab_Cadre;
    	public  GrilleJournaliere GJ = new GrilleJournaliere();
    	JCalendar calendar = new JCalendar();
     
    	private final ActionListener _getDate = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
            	int day = Integer.parseInt(ae.getActionCommand());
            	int month = calendar._calendar.get(Calendar.MONTH);
            	int year = calendar._calendar.get(Calendar.YEAR);
            	System.out.println(day + "/" + (month +1) + "/" + year);
            	GJ.setJTxT_Date(day, month, year);
            }
        };
     
        private final ActionListener _changeMonth = new ActionListener() {
            public void actionPerformed(final ActionEvent ae) {
                final int nb = "next".equals(ae.getActionCommand()) ? 1: -1;
                calendar._calendar.add(Calendar.MONTH, nb);
            calendar.updateMonthYear();
            calendar.updateDaysNumber();
            }
        };
     
    	//Constructeur
    	public FenPrincipale() {
    		setBounds(100, 100, 1580, 850);
    		setLocationRelativeTo(null);
    		setResizable(false);
    		setTitle("Time Sheet par Marco Di Toro");
    		setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/logo.gif")));
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
    		calendar.previous.addActionListener(_changeMonth);
    		calendar.next.addActionListener(_changeMonth);
    		for (int i = 0; i < calendar._daysNumber.length; ++i) {
    			calendar._daysNumber[i].addActionListener(_getDate);
            }
    		calendar.setBounds(10, 10, 350, 225);
    		contentPane.add(calendar);
    		GJ.setBounds(378, 10, 1186, 801);
    		contentPane.add(GJ);
    		calendar.setBackground(Color.LIGHT_GRAY);
    		contentPane.add(getJLab_Cadre());
     
    	}	
     
    	//Label fond d'écran
    	private JLabel getJLab_Cadre() {
    		if (jLab_Cadre == null) {
    			jLab_Cadre = new JLabel("");
    			jLab_Cadre.setBounds(0, 0, 1580, 850);
    			jLab_Cadre.setIcon(new ImageIcon(FenPrincipale.class.getResource("/images/fonds/fond3.png")));
    		}
    		return jLab_Cadre;
    	}
     
    }

  15. #15
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 145
    Par défaut
    Super !

    Merci ça fonctionne enfin ! je vais pouvoir attaquer ma grille journalière !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JDialog modal et event sur JFrame
    Par roberto1 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 19/07/2006, 14h20
  2. [C#] Key event sur form
    Par kooljy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/06/2006, 14h24
  3. Event sur base de donnée Firebird et programmation delphi
    Par seb8810 dans le forum Connexion aux bases de données
    Réponses: 5
    Dernier message: 16/03/2006, 18h06
  4. Event sur le parcours d'un combobox
    Par Psykotik dans le forum MFC
    Réponses: 11
    Dernier message: 25/11/2005, 10h20
  5. window.event sur netscape
    Par edon47 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2005, 03h57

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