I'm looking for a way to make a line curve through a number of points. It would be preferable to use 3 points although I've considered that in order to give context to the angle of the line entering a point more may be needed to give context to the curve so to speak.
In general a start point P1, a control point P2 and an end point P3, the line should curve to P2 from P1 and then curve from P2 to P3.
In fact here is a perfect example of the effect I would like to achieve:

If I could do this I really would be eternally grateful!
In Java so far, I have tried playing around with things such as QuadCurve2D.Double , Cub icCurve2D.Double and also Path2D.Double (using curveTo with Path2D.Double) but to no avail - the curves which are painted aren't even close to passing through the control point specified.
Here is an image of the methods I have tried so far :

And here is the code I used to generate the points and curves in the image :
Graphics2D g = (Graphics2D) window.getGraphics();
g.setColor(Color.blue);
int d = 4;
// P0
int x0 = window.getWidth()/8;
int y0 = 250;
g.drawString("P0", x0, y0 + 4*d);
g.fillRect(x0, y0, d, d);
// P1
int x1 = (window.getWidth()/7)*2;
int y1 = 235;
g.drawString("P1", x1, y1 + 4*d);
g.fillRect(x1, y1, d, d);
// P2
int x2 = (window.getWidth()/2);
int y2 = 200;
g.drawString("P2", x2, y2 - 2*d);
g.fillRect(x2, y2, d, d);