Rendre un JSCrollPane immédiat

Aller en bas

Rendre un JSCrollPane immédiat Empty Rendre un JSCrollPane immédiat

Message  Gus le Lun 30 Nov - 13:46

Voici une entité qui permet de rendre un JScrollPane immédiat (un simple clic ramène l'ascenseur à l'endroit voulu).

gus.graphic.scrollpane.immediatscroll

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

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import gus05.framework.core.Entity;
import gus05.framework.features.Give;
import gus05.framework.features.Register;
import javax.swing.BoundedRangeModel;
import javax.swing.JButton;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.plaf.metal.MetalScrollBarUI;

public class ImmediatScroll implements Entity, Give, Register, MouseListener, MouseMotionListener
{
    public String getName()         {return "gus.graphic.scrollpane.immediatscroll";}
    public String getCreationDate()      {return "2008.08.11";}

    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 scroll = (JScrollPane)obj;
       
        if(vertical)
        {
           JScrollBar bar = scroll.getVerticalScrollBar();
            handleBar(bar);
        }
        if(horizontal)
        {
           JScrollBar bar = scroll.getHorizontalScrollBar();
            handleBar(bar);
        }
    }
   
    private void handleBar(JScrollBar bar)
    {
       bar.setUI(new ScrollBarUI0());
        bar.addMouseListener(this);
        bar.addMouseMotionListener(this);
        bar.setBlockIncrement(0);
    }
   
    public void mouseClicked(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {move(e);}
    public void mouseDragged(MouseEvent e) {move(e);}
    public void mouseMoved(MouseEvent e) {}
   
    private void move(MouseEvent e)
    {
        JScrollBar bar = (JScrollBar)e.getSource();
        BoundedRangeModel model = bar.getModel();
        ScrollBarUI0 ui = (ScrollBarUI0) bar.getUI();
       
        int decr_h = ui.getDecrButton().getHeight();
        int incr_h = ui.getIncrButton().getHeight();
        int h0 = bar.getHeight() - decr_h - incr_h;
       
        double v = (e.getPoint().getY() - incr_h)/(double)h0;
       
        int min = model.getMinimum();
        int max = model.getMaximum();
       
        int newValue = (int)(min + (max-min)*v);
        bar.getModel().setValue(newValue);
    }
   
    private class ScrollBarUI0 extends MetalScrollBarUI
    {
        public JButton getDecrButton()
        {return decrButton;}
       
        public JButton getIncrButton()
        {return incrButton;}
    }
}
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