as your scenario is for the text scroll bar
we will have to create a new code for the jpg image
I think
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class MyWorld here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class ScrollBarV01 extends World
{
int scroll = 0;
int loY, hiY, range;
int pixelHeight, maxScroll;
Actor page, handle;
public ScrollBarV01()
{
super(900, 600, 1, false);
GreenfootImage image = new GreenfootImage("galaxy-stars02.jpg");
pixelHeight = image.getHeight();
GreenfootImage pane = new GreenfootImage(900, pixelHeight);
maxScroll = (pane.getHeight()-600)/pixelHeight;
if (maxScroll < 0) maxScroll = 0;
page = new Actor() {};
page.setImage(pane);
addObject(page, 450, Math.min(pane.getHeight()/2, 300+page.getImage().getHeight()/2));
int handleHeight = 600*600/pane.getHeight();
if (handleHeight >= 600) return;
GreenfootImage hImg = new GreenfootImage(16, handleHeight);
hImg.setColor(Color.GRAY);
hImg.fill();
loY = hImg.getHeight()/2;
hiY = 600-hImg.getHeight()/2;
range = hiY-loY;
GreenfootImage sbImg = new GreenfootImage(20, 600);
sbImg.setColor(Color.LIGHT_GRAY);
sbImg.fill();
sbImg.setColor(Color.DARK_GRAY);
sbImg.drawRect(2, 2, 16, 596);
getBackground().drawImage(sbImg, 879, 0);
handle = new Actor()
{
public void act()
{
if (Greenfoot.mouseDragged(this)) setLocation(getX(), Greenfoot.getMouseInfo().getY());
if (Greenfoot.isKeyDown("up")) setLocation(getX(), getY()-1);
if (Greenfoot.isKeyDown("down")) setLocation(getX(), getY()+1);
if (getY() < loY) setLocation(getX(), loY);
if (getY() > hiY) setLocation(getX(), hiY);
int ds = maxScroll*(getY()-loY)/range-scroll;
page.setLocation(page.getX(), page.getY()-ds*pixelHeight);
scroll += ds;
}
};
handle.setImage(hImg);
addObject(handle, 890, loY);
}
}
public ScrollBarV01()
{
super(900, 600, 1, false);
GreenfootImage pane= new GreenfootImage("galaxy-stars02.jpg");
maxScroll = (pane.getHeight()-600);
if (maxScroll < 0) maxScroll = 0;
page = new Actor() {};
page.setImage(pane);
addObject(page, 450, Math.min(pane.getHeight()/2, 300+page.getImage().getHeight()/2));
int handleHeight = 600*600/pane.getHeight();
if (handleHeight >= 600) return;
GreenfootImage hImg = new GreenfootImage(16, handleHeight);
hImg.setColor(Color.GRAY);
hImg.fill();
loY = hImg.getHeight()/2;
hiY = 600-hImg.getHeight()/2;
range = hiY-loY;
GreenfootImage sbImg = new GreenfootImage(20, 600);
sbImg.setColor(Color.LIGHT_GRAY);
sbImg.fill();
sbImg.setColor(Color.DARK_GRAY);
sbImg.drawRect(2, 2, 16, 596);
getBackground().drawImage(sbImg, 879, 0);
handle = new Actor()
{
public void act()
{
if (Greenfoot.mouseDragged(this)) setLocation(getX(), Greenfoot.getMouseInfo().getY());
if (Greenfoot.isKeyDown("up")) setLocation(getX(), getY()-1);
if (Greenfoot.isKeyDown("down")) setLocation(getX(), getY()+1);
if (getY() < loY) setLocation(getX(), loY);
if (getY() > hiY) setLocation(getX(), hiY);
int ds = maxScroll*(getY()-loY)/range-scroll;
page.setLocation(page.getX(), page.getY()-ds);
scroll += ds;
}
};
handle.setImage(hImg);
addObject(handle, 890, loY);
}