Synchroniser les positions de JScrollPanes

Aller en bas

Synchroniser les positions de JScrollPanes Empty Synchroniser les positions de JScrollPanes

Message  Gus le Lun 30 Nov - 0:21

Voici une petite entité qui permet de synchroniser les positions de plusieurs objets JScrollPane :

gus.graphic.scrollpane.scrollsynchronizer

Code:
package gus05.entity.gus.graphic.scrollpane.scrollsynchronizer;

import javax.swing.BoundedRangeModel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import gus05.framework.core.Entity;
import gus05.framework.features.Give;
import gus05.framework.features.Register;


public class ScrollSynchronizer implements Entity, Give, Register {

    public String getName()         {return "gus.graphic.scrollpane.scrollsynchronizer";}
    public String getCreationDate()      {return "2006.07.07";}

   
    private boolean vertical = true;
    private boolean horizontal = true;
   
   
    public void register(String key, Object obj) throws Exception
    {
        if(key.equals("vertical"))
        {vertical = Boolean.parseBoolean(obj.toString());return;}
       
        if(key.equals("horizontal"))
        {horizontal = Boolean.parseBoolean(obj.toString());return;}
       
        throw new Exception("Unknown key: "+key);
    }
   
    public void give(Object obj) throws Exception
    {
        JScrollPane[] scrolls = (JScrollPane[])obj;
        if(scrolls.length<2)
            throw new Exception("not enough scroll for synchronizing: "+scrolls.length);
       
        if(vertical)
        {
            JScrollBar[] bars = new JScrollBar[scrolls.length];
            for(int i=0;i<bars.length;i++)
            bars[i] = scrolls[i].getVerticalScrollBar();
            new SynchScroll(bars);
        }
        if(horizontal)
        {
            JScrollBar[] bars = new JScrollBar[scrolls.length];
            for(int i=0;i<bars.length;i++)
            bars[i] = scrolls[i].getHorizontalScrollBar();
            new SynchScroll(bars);
        }
    }

   
    private class SynchScroll implements ChangeListener {

        private BoundedRangeModel[] models;
       
        public SynchScroll(JScrollBar[] bars)
        {
            models = new BoundedRangeModel[bars.length];
            for(int i=0;i<bars.length;i++)
            {
                models[i] = bars[i].getModel();
                models[i].addChangeListener(this);
            }
        }

        public void stateChanged(ChangeEvent e)
        {
            for(int i=0;i<models.length;i++)
            if(models[i].getMaximum()<=0)return;
           
            BoundedRangeModel modelSrc = (BoundedRangeModel)e.getSource();
            int value = modelSrc.getValue();
           
            for(int i=0;i<models.length;i++)
            models[i].setValue(value);
        }
    }
}
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

Voir le profil de l'utilisateur http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum