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 :

JSpinner heure-minutes -> quel remplaçant?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut JSpinner heure-minutes -> quel remplaçant?
    Salut,

    Je souhaites avoir un spinner qui affiche une heure hh:mm entre 00:00 et 23:59, jusqu'ici, tout va bien, il suffit de créer un JSpinner avec un SpinnerDateModel avec un JSpinner.DateEditor, et le tour est joué.

    Oui, en théorie. Sauf que JSpinner est buggué. En effet il ne prend pas en compte le "calendarField" (et donc quand on clique il incrémente toujours les heures, et non les minutes).
    Bug : http://bugs.sun.com/bugdatabase/view...bug_id=4834408

    Donc qu'à cela ne tienne, il suffit d'overrider SpinnerDateModel par un SpinnerTimeModel qui ressemblerait à 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public class SpinnerTimeModel extends SpinnerDateModel {
     
    	private int calendarField;
     
    	public SpinnerTimeModel(Date value, Comparable<?> start, Comparable<?> end, int calendarField) {
    		super(value, start, end, calendarField);
    		if (calendarField != Calendar.HOUR && calendarField != Calendar.HOUR_OF_DAY && calendarField != Calendar.MINUTE && calendarField != Calendar.SECOND && calendarField != Calendar.MILLISECOND) {
    			throw new IllegalArgumentException("CalendarField must be one of HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND static field of Calendar class.");
    		}
    		this.calendarField = calendarField;
    	}
     
    	public SpinnerTimeModel(int calendarField) {
    		this(new Date(), null, null, calendarField);
    	}
     
    	@Override
    	public Date getNextValue() {
    		Calendar cal = Calendar.getInstance();
    		cal.setTime(getDate());
    		cal.add(calendarField, 1);
    		return cal.getTime();
    	}
     
    	@Override
    	public Date getPreviousValue() {
    		Calendar cal = Calendar.getInstance();
    		cal.setTime(getDate());
    		cal.add(calendarField, -1);
    		return cal.getTime();
    	}
     
    	@Override
    	public Date getValue() {
    		return (Date) super.getValue();
    	}
     
    }
    Là ça marche un peu mieux, ça incrémente les minutes... Mais à chaque incrémentation, ça sélectionne les heures... Donc ça n'est pas très joli.

    Il faudrait donc overrider également JSpinner.DefaultEditor pour utiliser un autre éditeur que JSpinner.DateEditor, mais c'est vraiment très mal organisé (les classes de Sun sorties avant Java 5 c'est un peu horrible au niveau conception (par contre à partir de Java 5 c'est très bien fait)).
    J'ai donc commencé à essayer de faire marcher une classe qui étendrait DefaultEditor, ce que je n'ai pas encore réussi. Mais avant de continuer, connaissez-vous une classe toute faite (un peu comme JCalendar mais pour les heures uniquement), dont il ne faut pas recréer 3 classes pour corriger les bugs...?

    Merci d'avance...

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par défaut
    Salut !

    Il te suffit de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class TonSpinner extends JSpinner {
     
        public TonSpinner() {
    	super(new SpinnerDateModel());
    	((JSpinner.DateEditor)getEditor()).getTextField().setFormatterFactory(new DefaultFormatterFactory(
    		    new DateFormatter(DateFormat.getTimeInstance(DateFormat.SHORT))));
    	setDuration(new Duration());
        }
    }
    Je l'utilise moi-même et ça marche à merveille...

    En espérant t'avoir aidé...

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Tijee
    Salut !

    Il te suffit de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class TonSpinner extends JSpinner {
     
        public TonSpinner() {
    	super(new SpinnerDateModel());
    	((JSpinner.DateEditor)getEditor()).getTextField().setFormatterFactory(new DefaultFormatterFactory(
    		    new DateFormatter(DateFormat.getTimeInstance(DateFormat.SHORT))));
    	setDuration(new Duration());
        }
    }
    Je l'utilise moi-même et ça marche à merveille...

    En espérant t'avoir aidé...
    Euh, je viens de le tester (en supprimant setDuration), ça ne change rien par rapport à l'utilisation d'un JSpinner.DateEditor auquel tu passes un pattern en paramètre.
    Autrement dit il y a toujours le problème, quand tu incrémentes ça incrémente les heures...

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par défaut
    Autant pour moi j'avais oublié d'enlever le setDuration().

    C'est quand même bizarre si tu utilises un DateEditor il suffit de cliquer sur les minutes pour que ça incrémente les minutes...

    A moins que j'ai mal compris ton problème et que tu veuilles que ça incrémente les minutes par défaut ?

    Dans ce cas essaye de redéfinir les méthodes getNextValue() et getPreviousValue() de ton JSpinner.

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Tijee
    Autant pour moi j'avais oublié d'enlever le setDuration().

    C'est quand même bizarre si tu utilises un DateEditor il suffit de cliquer sur les minutes pour que ça incrémente les minutes...

    A moins que j'ai mal compris ton problème et que tu veuilles que ça incrémente les minutes par défaut ?

    Dans ce cas essaye de redéfinir les méthodes getNextValue() et getPreviousValue() de ton JSpinner.
    Oui, si tu cliques sur les minutes, ça incrémentes les minutes... tout en ayant la sélection sur l'heure (les 2 chiffres de l'heure sont surlignés), c'est pas terrible je trouve.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par défaut
    Ah, il ne me semble pas que ça me le fasse... Peut-être un problème dû au Look and Feel...

Discussions similaires

  1. Conversion minutes vers Jour:Heure:minute
    Par jaq dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/09/2009, 17h01
  2. Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 29/11/2005, 13h43
  3. [Dates] Jour Mois anné, heure minute et seconde...
    Par SangKou dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 08h34
  4. Conversion heures minutes en heures centièmes
    Par shaman262 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/10/2005, 17h53
  5. Formater une durée sous la forme Heure:Minute:Seconde
    Par marsupile dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/01/2004, 23h29

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