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

Langage Java Discussion :

heure réglable avec Calendar


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut heure réglable avec Calendar
    Bonjour,

    Je suis en train de faire une horloge réglable ( j'essaye en fait ).

    Pour ce faire, je récupère l'heure système grâce à la méthode Calendar comme ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public String donnerHeure(int h, int m, int s) {
     		GregorianCalendar d = new GregorianCalendar();	
    		int heure = d.get(Calendar.HOUR_OF_DAY);	
    		int min = d.get(Calendar.MINUTE);
    		int sec = d.get(Calendar.SECOND);	
    		return (heure+":"+min+":"+sec);
     
    		}
    Grâce à un thread, j'arrive à lancer cette fonction toutes les secondes et cela affiche dans un label l'heure réactualisée toutes les secondes, superbe.

    Mais là n'est pas le plus dur, car maintenant j'aimerais changer l'heure dynamiquement avec 3 entiers en paramètre dans la fonction (heure, secondes, minutes).

    Par le moyens de checkbox, on choisi les nouvelles données de l'heure.

    J'ai réfléchi ( et oui), et je me suis dit que pour régler les minutes je vais :
    calculer combien de minutes il faut pour arriver à 60 en soustrayant les minutes systeme par 60 , et ensuite ajouter la difference à la minute voulue.

    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
    public String donnerHeure(int h, int m, int s) {
    		GregorianCalendar d = new GregorianCalendar();
    	        int heure = d.get(Calendar.HOUR_OF_DAY);	
                    int min = d.get(Calendar.MINUTE);
    	        int sec = d.get(Calendar.SECOND);	
     
    //Calcul de la différence
      int diff=60-min;
     
    //Je rajoute dans l'heure calendrier la différence ce qui amène les minutes à 0 et j'ajoute la minute voulue (m).
     
                  d.add(Calendar.HOUR_OF_DAY,diff+m);
     
     
    		int min2 = d.get(Calendar.MINUTE);//je récupère les minutes modifiées
     
    		return (heure+":"+min2+":"+sec);
     
    		}
    Avec cela, les minutes changent bien mais elles se figent, elles ne défilent plus en fonction des secondes.

    En fait j'ai remarqué que dès lors que dans la calendar.add, j'utilise une soustraction, tout se fige complètement.
    Malheuresement je n'arrive pas à faire l'expression arithmétique sur les heures calendar qui me permetteraient de régler cette horloge.

    Peut être je fais fausse piste et ne devrait pas utiliser Calendar pour pouvoir régler une heure en java.

    Pouvez vous m'éclairer s'il vous plait? Je dois en plus rendre ce projet cette semaine.

    Je met aussi à disposition ceci :

    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
    public String donnerHeure(int h, int m, int s) {
    		GregorianCalendar d = new GregorianCalendar();
    	        int heure = d.get(Calendar.HOUR_OF_DAY);	
                    int min = d.get(Calendar.MINUTE);
    	        int sec = d.get(Calendar.SECOND);	
     
                int diff=60-min;
     
                   d.add(Calendar.HOUR_OF_DAY,diff+m);
     
     
    		int min2 = d.get(Calendar.MINUTE);
     
    		return (heure+":"+min2+":"+sec);
     
    		}
     
                   public void run() {
    			while (interrupted==false) {
     
    				l.setText(donnerHeure(h,m,s));
    				try {
    					Thread.sleep(1000);
     			} catch (InterruptedException e) {}
    			}
     
    		}
    J'attend vos conseils.

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Ca ne peut pas marcher puisque tu reprends a chaque fois l'heure system.
    Il faut que ton objet GregorianCalendar soit un attribut de classe.

    Voici un code qui devrait faire a peu près ce que tu cherche.

    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
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    public class Go extends Thread implements ActionListener {
     
    	private JLabel l;
    	private JTextField tH;
    	private JTextField tM;
    	private JTextField tS;
    	private JButton btn;
    	private GregorianCalendar d = new GregorianCalendar();
     
    	public Go() {
    		JFrame f = new JFrame();
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		btn = new JButton("maj");
    		btn.addActionListener(this);
    		l = new JLabel();
    		l.setPreferredSize(new Dimension(80,20));
    		tH = new JTextField();
    		Dimension dim = tH.getPreferredSize();
    		dim.width = 30;
    		tH.setPreferredSize(dim);
    		tM = new JTextField();
    		dim = tM.getPreferredSize();
    		dim.width = 30;
    		tM.setPreferredSize(dim);
    		tS = new JTextField();
    		dim = tS.getPreferredSize();
    		dim.width = 30;
    		tS.setPreferredSize(dim);
    		JPanel p = new JPanel(new FlowLayout());
    		p.add(l);
    		p.add(new JLabel("h: "));
    		p.add(tH);
    		p.add(new JLabel("m: "));
    		p.add(tM);
    		p.add(new JLabel("s: "));
    		p.add(tS);
    		p.add(btn);
    		f.setContentPane(p);
     
    		f.pack();
    		f.setLocationRelativeTo(null);
    		f.setVisible(true);
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Go go = new Go();
    		go.start();
    	}
     
    	public void setHorloge(int h, int m, int s) {
    		int y = d.get(Calendar.YEAR);
    		int mo = d.get(Calendar.MONTH);
    		int j = d.get(Calendar.DAY_OF_MONTH);
    		d = new GregorianCalendar(y,mo,j,h,m,s);
    	}
     
    	public String getHorloge() {
    		d.add(Calendar.SECOND, 1);
    		int heure = d.get(Calendar.HOUR_OF_DAY);
    		int min = d.get(Calendar.MINUTE);
    		int sec = d.get(Calendar.SECOND);
    		return (heure + "h" + min + ":" + sec);
     
    	}
     
    	public void run() {
    		while (true) {
    			l.setText(getHorloge());
    			try {
    				Thread.sleep(1000);
    			} catch (InterruptedException e) {}
    		}
     
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		int h = 0;
    		try {
    			h = Integer.parseInt(tH.getText());	
    		}
    		catch (NumberFormatException ex) { }
    		int m = 0;
    		try {
    			m = Integer.parseInt(tM.getText());	
    		}
    		catch (NumberFormatException ex) { }
    		int s = 0;
    		try {
    			s = Integer.parseInt(tS.getText());	
    		}
    		catch (NumberFormatException ex) { }
    		System.out.println(h + "," + m + "," + s);
    		setHorloge(h, m, s);
    	}
     
    }

Discussions similaires

  1. Modifier l'heure d'une date avec Calendar
    Par Marcel Chabot dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 02/11/2012, 17h17
  2. probleme avec Calendar
    Par jerome86600 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 22/05/2007, 16h03
  3. Réponses: 3
    Dernier message: 18/11/2006, 21h44
  4. Réponses: 5
    Dernier message: 02/07/2006, 19h37
  5. Reconfigurer l'heure systeme avec dpk-reconfigure ?
    Par vosaray dans le forum Debian
    Réponses: 2
    Dernier message: 22/11/2005, 14h01

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