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 :

Un Spinner à la place d'un ScrollPane


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut Un Spinner à la place d'un ScrollPane
    Bonjour à tous...

    Alors je crois que c'est le moment de présenter mon problème.
    J'ai synchroniser un spinner avec un scrollpane (le spinner déplace la barre de défilement lorsque je clic dessus et vice-versa)
    Jusqu'à là pas de pb!
    Le truc c'est que mon spinner (ou le scrollpane) ne déplace rien

    Donc pour éviter de balancer tout mon code, j'ai isolé mon problème.
    Bon j'ai tout mis dans le constructeur de la fenêtre avec un Layout tout pourri (mais ça on s'en fout ).
    Ce que je voudrais c'est que le panneau2 se déplace puisque j'ai fait exprès de le faire plus grand que le panneau1

    Je remercie par avance ce qui se pencherons sur mon problème

    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
    import java.awt.Color;
    import javax.swing.BoundedRangeModel;
    import javax.swing.JFormattedTextField;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollBar;
    import javax.swing.JSpinner;
    import javax.swing.SpinnerNumberModel;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    import javax.swing.text.DefaultFormatter;
    import javax.swing.text.DefaultFormatterFactory;
     
     
     
    class Fenetre extends JFrame 
    {
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	public Fenetre()
    	{
    	setTitle("Spinner");
    	setSize(700, 500);
    	getContentPane().setLayout(null);
     
    	panneau = new JPanel();
    	panneau2 = new JPanel();
     
    	panneau.setLayout(null);
    	panneau2.setLayout(null);
     
    	panneau.setSize(600,400);
    	panneau2.setBounds(50,10,540,700);
     
    	getContentPane().add(panneau);
    	panneau.add(panneau2);
     
    	panneau.setBackground (Color.BLACK);
    	panneau2.setBackground (Color.DARK_GRAY);
     
     
    	int step   = 2;
    	int extent = 5;
    	int min    = 0;
    	int max    = extent*2;
    	int value  = 0;
     
    	scrollbar = new JScrollBar(JScrollBar.VERTICAL, value, extent, min, max+extent);	
    	scrollbar.setUnitIncrement(2);
    	scrollbar.setBlockIncrement(1);
     
     
    	spinner = new JSpinner(new SpinnerNumberModel(value, min, max, step));
        tf = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField();
        ((DefaultFormatter) tf.getFormatter ()).setAllowsInvalid (false);
        factory = (DefaultFormatterFactory)tf.getFormatterFactory();
     
    	panneau.add(spinner);
    	tf.setBackground(Color.black);
    	tf.setForeground(Color.green);
    	spinner.setBounds(10, 10, 35, 30);
     
    	panneau.add(scrollbar);
    	scrollbar.setBounds(10, 50, 20, 300);
    	scrollbar.setVisible(true);
     
     
    //	La scrollbar fait défiler le spinner
    	scrollbar.setUnitIncrement(step);
    	scrollbar.getModel().addChangeListener(new ChangeListener() {
    	    public void stateChanged(ChangeEvent e) {
    	        BoundedRangeModel m = (BoundedRangeModel)e.getSource();
    	        spinner.setValue(new Integer(m.getValue()));
    	    }
    		   });
     
     
     
        //Le spinner fait défiler la barre de défillement
        spinner.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
              scrollbar.setValue(((Integer)spinner.getValue()).intValue());
            }
       });
     
     	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}	
    	JScrollBar scrollbar;
    	JSpinner spinner;
    	JPanel panneau, panneau2;
    	JFormattedTextField tf;
    	DefaultFormatterFactory factory;
    }
     
    public class Spin {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Fenetre fen = new Fenetre();
    		fen.setVisible(true);
    	}
     
    }

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Je te conseille de travailler directement sur le JViewPort de ton JScrollPane.

    Le viewport propose un changeListener réagissant à chaque mouvement dans le JScrollPane, et une méthode setViewPosition permettant de modifier la position du JScrollPane.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut
    Dans mon premier message je me suis trompé dans le sens où c'est pas un scrollpane mais un scrollbar que j'ai mis dans mon code.

    J'avais déjà essayé avec viewport, mais avec un scrollbar j'y arrive pas (j'ai l'impression que viewport marche qu'avec scrollpane).

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Après réflexion, la solution la plus propre est de passer par une délégation de modèle.

    De fait il suffit de créer un modèle pour le JSpinner qui s'appuie sur le modèle de ta JScrollBar.

    Exemple:

    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
    package fr.cabane.maventests.scrollpane;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import javax.swing.AbstractSpinnerModel;
    import javax.swing.BoundedRangeModel;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JSpinner;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
     
    public class SpinnerBoundedRangeModel extends AbstractSpinnerModel{
     
        private BoundedRangeModel model;
     
        public SpinnerBoundedRangeModel(BoundedRangeModel model) {
            this.model = model;
            model.addChangeListener(new ChangeListener() {
     
                @Override
                public void stateChanged(ChangeEvent e) {
                    SpinnerBoundedRangeModel.this.fireStateChanged();
     
                }
            });
        }
     
     
        @Override
        public Object getValue() {
          return (Integer) model.getValue();
        }
     
        public void setValue(Object value) {
           model.setValue((Integer)value);
        }
     
        public Object getNextValue() {
            return (Integer) (model.getValue()+model.getExtent()<=model.getMaximum()?model.getValue()+model.getExtent():model.getMaximum());
        }
     
        public Object getPreviousValue() {
            return (Integer) (model.getValue()-model.getExtent()>=model.getMinimum()?model.getValue()-model.getExtent():model.getMinimum());
        }
     
        public static void main(String[] args) {
            final JPanel panel = new JPanel();
            panel.setPreferredSize(new Dimension(1248,1024));
            final JScrollPane p = new JScrollPane(panel);
     
            JSpinner spinner = new JSpinner(new SpinnerBoundedRangeModel(p.getVerticalScrollBar().getModel()));
     
            JFrame f = new JFrame();
            f.setSize(800,400);
            f.add(p);
            f.add(spinner,BorderLayout.NORTH);
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setVisible(true);
        }
     
    }

Discussions similaires

  1. [SAX] Vitesse contre place en mémoire
    Par Dinaïz dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 15/10/2004, 13h37
  2. [C#] Postback à la place de onclick avec Entrée
    Par Anomaly dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/09/2004, 14h35
  3. ' ù ' à la place de ' é '
    Par Zazeglu dans le forum C
    Réponses: 6
    Dernier message: 28/08/2003, 14h27
  4. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01
  5. Place des autodidactes sur le marché du travail
    Par Argh! dans le forum Emploi
    Réponses: 21
    Dernier message: 24/05/2003, 22h01

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