# Randomly scaling fillOval

I have:

page.fillOval(x-4, y-4, 8, 8);

in the API docs I read:

fillOval
public abstract void fillOval
(int x,
int y,
int width,
int height)Fills an oval bounded by the specified rectangle with the current color.

Parameters:
x - the x coordinate of the upper left corner of the oval to be filled.
y - the y coordinate of the upper left corner of the oval to be filled.
width - the width of the oval to be filled.
height - the height of the oval to be filled.

---------------
So how might I approach randomly scaling this?

Something like:
page.fillOval*(1 + (int)(100*Math.random()));  //to scale randomly from [1-100]?????
###### Who is Participating?

Commented:
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g.create();
g2d.scale(xscale, yscale);
g2d.fillOval(x, y, w, h);
g2d.dispose();
}
0

Commented:
*Where* are you scaling it?
0

Commented:
double scaling = Math.random();
page.fillOval(x, y, w*scaling, h*scaling);
0

Commented:
Something like:

int width = getWidth();
int height = getHeight();
int scaledWidth = (int)(Math.random() * getWidth());
int scaledHeight = (int)(Math.random() * getHeight());

fillOval(width - scaledWidth, height - scaledHeigth, scaledWidth, scaledHeight);
0

Commented:
>>int scaledWidth = (int)(Math.random() * getWidth());

should have been

int scaledWidth = (int)(Math.random() * width);

and same for height
0

Author Commented:
So I can't scale the object as a whole, but rather need to scale the fillOval perameters?
0

Commented:
if you want to centre the scaled oval then simply offset the x,y.

0

Commented:
to scale the ovject as a whole you would apply a scaling transformation to the Graphics context
0

Commented:
What does 'the object' refer to?
0

Commented:
g2d.scale(xscale, yscale);
g2d.fillOval(...
0

Commented:
any other painting you also do with that context will then also be scaled
0

Author Commented:
Is there a way to add points after people respond to questions?  You both deserve the points.  I can't help but laugh watching you guys/gals battle to deliver new insite into my learning.  Give me a few minutes to digest...lol!
0

Commented:
sorry, 500 is the max allowed.
0

Commented:
500's quite enough for this type of question ;-)
0

Author Commented:
Here's where I've landed:

private int x = 50, y = 50;
private boolean mouseHere = false;
private Color c = Color.red;
private int width = getWidth();
private int height = getHeight();
private int scaleRange = 100;
private int scaledWidth = ((1 + (int)(scaleRange*Math.random())) * width);
private int scaledHeight = ((1 + (int)(scaleRange*Math.random())) * height);
private int newX, newY;

//  Random scaling of fillOval at mouse location
//  rescale in range [1-100]
public void randomScale(MouseEvent event, Graphics newOval)
{
newX = event.getX();
newY = event.getY();
newOval.fillOval(x - newX, y - newY, scaledWidth, scaledHeight);
}

// Definition of the mouse listener as an inner class
//Note:  E:\depaul\docs\api\java\awt\event\AWTEventListener.html
private class ClickListener implements MouseListener
{
// Record the location of the mouse click event
public void mouseClicked(MouseEvent event)
{
x = event.getX();
y = event.getY();
randomColor();
//randomScale();
repaint();
}
}

Now this leads me to my previous question "How do I call one method from another method in the same class?"  which I'm slowly getting my head around.  The //randomScale(); give a compile error because I have parameters in the randomScale method.  How do I call this method?

I believe I can drop the x = event.getX(); and y = event.getY(); once I can call randomScale();.

Last is there a resourse online to study examples of these types of calls?
0

Commented:
0

Commented:
you also need to do some reorganising a little.

your mouse listener needs to update the dimensions of the oval you need to paint, and then call repaint()
the actual painting should be done in the paintComponent() method

see the code I posted in the previous question as it should be similkiar to that.
0

Commented:
0

Author Commented:
Where does the .dispose come form in the previous example?  I'll be working on this over the weekend.  Having a hard time with the organization and understanding what your saying.  Pts...forthcoming.
0

Commented:
dispose() fress up the resources used by the graphics context.
As it created a new instance of the context (using create()) it is also responsible for releasing the resources once they are no longer needed.
0

Commented:
8-)
0

Commented:
(:
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.