The selection object depends on the graphic object. In
fact, the manager creates the selection object using the following
method of the graphic object:
IlvSelection makeSelection()
You can override this method to return your own instance
of the selection object. Another possibility is to set an
IlvSelectionFactory on the manager and let this factory decide which
subclass of
IlvSelection
should be instantiated
depending on the graphic object. The following is an example which
creates a new selection object (a white border) around the selected
object.
class mySelection extends IlvSelection
{
static final int thickness = 3;
mySelection(IlvGraphic obj)
{
super(obj);
}
public void draw(Graphics g, IlvTransformer t)
{
g.setColor(Color.white);
IlvRect rect = boundingBox(t);
for (int i = 0; i < thickness; i++) {
if ((int)Math.floor(rect.width) >
2*i && (int)Math.floor(rect.height) > 2*i)
g.drawRect((int)Math.floor(rect.x)+i,
(int)Math.floor(rect.y)+i,
(int)Math.floor(rect.width)-2*i-1,
(int)Math.floor(rect.height)-2*i-1);
}
}
public IlvRect boundingBox(IlvTransformer t)
{
// get the bounding rectangle of the selected object
IlvRect bbox = getObject().boundingBox(t);
bbox.x-= thickness;
bbox.y-= thickness;
bbox.width+= 2*thickness;
bbox.height+= 2*thickness;
return bbox;
}
public boolean contains(IlvPoint p, IlvPoint tp, IlvTransformer t)
{
return false;
}
}
You can see that the selection object is defined in the
same way as a graphic object. The constructor of a selection object
always takes the selected object as a parameter. Note that the boundingBox
method
of the selection object uses the boundingBox
method
of the selected object so that the selection object (in this case,
the white border) is always around the selected object, whatever the
transformer is.