|
| |
Uses of a Scrollbar
- As a slider
- As a way of scrolling a window
Scrollbar Events
| |
SCROLL_LINE_UP |
Scrolled a "line"
up |
| |
SCROLL_LINE_DOWN |
Scrolled a "line"
down |
| |
SCROLL_PAGE_UP |
Scrolled a "page"
up |
| |
SCROLL_PAGE_DOWN |
Scrolled a "page"
down |
| |
SCROLL_ABSOLUTE |
Scrolled to an absolute
position |
package Slider;
import java.awt.Frame;
import java.awt.Canvas;
import java.awt.Label;
import java.awt.Scrollbar;
import java.awt.TextField;
import java.awt.Event;
import java.awt.Panel;
import java.awt.GridLayout;
import java.awt.Color;
public class Slider extends Frame
{
public static void main(String[] args)
{
Frame f = new Slider();
f.resize(300, 200);
f.show();
}
public Slider()
{
setTitle("Slider Example");
Panel p = new Panel(new GridLayout(3, 3));
p.add(m_redCanvas);
m_redCanvas.setBackground(Color.red);
p.add(m_redText);
p.add(m_redScroll);
m_redScroll.setPageIncrement(16);
p.add(m_greenCanvas);
m_greenCanvas.setBackground(Color.green);
p.add(m_greenText);
p.add(m_greenScroll);
m_greenScroll.setPageIncrement(16);
p.add(m_blueCanvas);
m_blueCanvas.setBackground(Color.blue);
p.add(m_blueText);
p.add(m_blueScroll);
m_blueScroll.setPageIncrement(16);
add("South", p);
m_targetCanvas.setBackground(new Color(0, 0, 0));
add("Center", m_targetCanvas);
}
public boolean handleEvent(Event evt)
{
if (evt.id == Event.WINDOW_DESTROY)
System.exit(0);
else if (evt.id == Event.LOST_FOCUS)
{
int value;
if (evt.target == m_redText)
{
value = Integer.parseInt(m_redText.getText());
m_redScroll.setValue(value);
}
else if (evt.target == m_greenText)
{
value = Integer.parseInt(m_greenText.getText());
m_greenScroll.setValue(value);
}
else if (evt.target == m_blueText)
{
value = Integer.parseInt(m_blueText.getText());
m_blueScroll.setValue(value);
}
}
else if (evt.id == Event.SCROLL_ABSOLUTE
|| evt.id == Event.SCROLL_LINE_DOWN
|| evt.id == Event.SCROLL_LINE_UP
|| evt.id == Event.SCROLL_PAGE_DOWN
|| evt.id == Event.SCROLL_PAGE_UP
)
{
int red = m_redScroll.getValue();
int green = m_greenScroll.getValue();
int blue = m_blueScroll.getValue();
m_redText.setText("" + red);
m_greenText.setText("" + green);
m_blueText.setText("" + blue);
m_targetCanvas.setBackground(new Color(red, green, blue));
m_targetCanvas.repaint();
return true;
}
return super.handleEvent(evt);
}
//////////// Data //////////////
private Canvas m_redCanvas = new Canvas();
private Canvas m_greenCanvas = new Canvas();
private Canvas m_blueCanvas = new Canvas();
private TextField m_redText = new TextField("0");
private TextField m_greenText = new TextField("0");
private TextField m_blueText = new TextField("0");
private Scrollbar m_redScroll
= new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 255);
private Scrollbar m_greenScroll
= new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 255);
private Scrollbar m_blueScroll
= new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 255);
private Canvas m_targetCanvas = new Canvas();
}
|

Beware!
The scrolling behavior is quite flaky!
package Scroller;
import java.awt.Scrollbar;
import java.awt.Canvas;
import java.awt.Frame;
import java.awt.Event;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Label;
import java.awt.Color;
public class Scroller extends Frame
{
public static void main(String[] args)
{
Frame f = new Scroller();
f.resize(300, 200);
f.show();
}
public Scroller()
{
setTitle("Scroller Example");
add("North", m_position);
m_position.setBackground(Color.lightGray);
add("East", m_verScroll);
add("South", m_horScroll);
add("Center", m_canvas);
}
public void show()
{
super.show();
reScale(0, 0);
reportPosition();
}
public boolean handleEvent(Event evt)
{
if (evt.id == Event.WINDOW_DESTROY)
System.exit(0);
else if (evt.id == Event.WINDOW_MOVED
|| evt.id == Event.WINDOW_EXPOSE
)
{
reScale(m_horScroll.getValue(),
m_verScroll.getValue());
reportPosition();
}
else if (evt.id == Event.SCROLL_ABSOLUTE
|| evt.id == Event.SCROLL_LINE_DOWN
|| evt.id == Event.SCROLL_LINE_UP
|| evt.id == Event.SCROLL_PAGE_DOWN
|| evt.id == Event.SCROLL_PAGE_UP
)
{
m_canvas.translate(m_horScroll.getValue(),
m_verScroll.getValue());
reportPosition();
return true;
}
return super.handleEvent(evt);
}
private void reScale(int x, int y)
{
Dimension d = m_canvas.size();
m_horScroll.setValues(x, d.width, 0, m_canvas.WIDTH);
m_horScroll.setVisible(d.width < m_canvas.WIDTH);
m_verScroll.setValues(y, d.height, 0, m_canvas.HEIGHT);
m_verScroll.setVisible(d.height < m_canvas.HEIGHT);
}
private void reportPosition()
{
int hMax = m_horScroll.getMaximum();
int vMax = m_verScroll.getMaximum();
int hVis = m_horScroll.getVisible();
int vVis = m_verScroll.getVisible();
int hPos = m_horScroll.getValue();
int vPos = m_verScroll.getValue();
m_position.setText("Max = [" + hMax + "," + vMax +
"] Visible = [" + hVis + "," + vVis +
"] Position = [" +
hPos + "," + vPos + "]");
}
/////////// Data ///////////
private Label m_position = new Label("");
private Scrollbar m_verScroll
= new Scrollbar(Scrollbar.VERTICAL);
private Scrollbar m_horScroll
= new Scrollbar(Scrollbar.HORIZONTAL);
private CanvasOfSquares m_canvas = new CanvasOfSquares();
}
class CanvasOfSquares extends Canvas
{
public static final int HEIGHT = 400;
public static final int WIDTH = 600;
public CanvasOfSquares()
{
for (int i = 0; i < m_square.length; i++)
{
int x = (int)(Math.random() * WIDTH);
int y = (int)(Math.random() * HEIGHT);
m_square[i] = new Point(x, y);
}
}
public void translate(int x, int y)
{
m_dx = x;
m_dy = y;
repaint();
}
public void paint(Graphics g)
{
g.translate(-m_dx, -m_dy);
for (int i = 0; i < m_square.length; i++)
draw(g, i);
}
public void draw(Graphics g, int i)
{
g.drawRect(m_square[i].x, m_square[i].y,
SQUARESIZE, SQUARESIZE);
}
/////////////// Data ///////////////
private static final int SQUARESIZE = 10;
private static final int MAXSQUARECOUNT = 100;
private int m_dx = 0;
private int m_dy = 0;
private int m_squareCount = 0;
private Point[] m_square = new Point[MAXSQUARECOUNT];
private int m_current = -1;
}
|


|