Assessment weight : 3% |
Due : Week 8 |
The new <SwapTwoInt2.java> file should contains the main() and swap() methods only. And source codes of IntObj class are contained in the file <IntObj.java>. Finally compile <SwapTwoInt2.java> and <IntObj.java> separately with either
javac *.java or javac IntObj.java javac SwapTwoInt2.java
Execute the result program.
Does it work?
What is the advantage of splitting the program and compiling the classes separately ?
import java.awt.*;
import java.applet.Applet;
public class RedRoseApplet extends Applet {
public void paint( Graphics g ) {
//set background color to white
g.setColor(Color.white);
g.fillRect(10, 10, 432, 482);
//draw green sepal
g.setColor(Color.green);
g.fillOval(38,138,40,40);
g.fillOval(68,138,40,40);
g.fillOval(38,168,40,40);
g.fillOval(68,168,40,40);
//draw red petal
g.setColor(Color.red);
g.fillOval(28,148,90,50);
g.fillOval(48,128,50,90);
//petal outline
g.setColor(Color.black);
g.drawArc(50,180,25,30,345,150);
g.drawArc(75,180,25,30,160,-105);
g.drawArc(88,163,30,20,230,-105);
g.drawArc(70,150,30,20,290,-120);
g.drawArc(45,140,25,30,345,-120);
g.drawArc(30,168,30,20,50,-70);
//draw pedicel
g.setColor(Color.green);
g.fillRect(71,218,3,100);
//draw right leave
int[] x = {73,94,131,104,73}, y = {246,216,218,250,246};
g.fillPolygon(x,y,5);
//draw left leave
int[] x1 = {71,55,27,47,71}, y1= {268,241,245,269,268};
g.fillPolygon(x1,y1,5);
}
}
To draw more than one RedRose, we create a seperate RedRose class
import java.awt.*;
public class RedRose {
//declare instance variables that are attributes of RedRose
public Color backGroundColor = (Color.white);
public void paintRose( Graphics g,int x,int y ) {
//set background color to white
g.setColor(backGroundColor);
g.fillRect(x+10,y+10, 150, 450);
//draw green sepal
g.setColor(Color.green);
g.fillOval(x+38,y+138,40,40);
g.fillOval(x+68,y+138,40,40);
g.fillOval(x+38,y+168,40,40);
g.fillOval(x+68,y+168,40,40);
//draw red petal
g.setColor(Color.red);
g.fillOval(x+28,y+148,90,50);
g.fillOval(x+48,y+128,50,90);
//petal outline
g.setColor(Color.black);
g.drawArc(x+50,y+180,25,30,345,150);
g.drawArc(x+75,y+180,25,30,160,-105);
g.drawArc(x+88,y+163,30,20,230,-105);
g.drawArc(x+70,y+150,30,20,290,-120);
g.drawArc(x+45,y+140,25,30,345,-120);
g.drawArc(x+30,y+168,30,20,50,-70);
//draw pedicel
g.setColor(Color.green);
g.fillRect(x+71,y+218,3,100);
//draw right leaf
int[] rightX = {x+73,x+94,x+131,x+104,x+73},
rightY = {y+246,y+216,y+218,y+250,y+246};
g.fillPolygon(rightX,rightY,5);
//draw left leaf
int[] leftX = {x+71,x+55,x+27,x+47,x+71},
leftY= {y+268,y+241,y+245,y+269,y+268};
g.fillPolygon(leftX,leftY,5);
}
}
and use RedRoseApplet1 to draw two RedRoses
import java.awt.*;
import java.applet.Applet;
public class RedRoseApplet1 extends Applet {
/* declare two variables with which to instantiate
two RedRose object in the init() method */
RedRose redRose1, redRose2;
public void init() {
redRose1 = new RedRose(); // create first RedRose object
redRose2 = new RedRose(); // create second RedRose object
}
public void paint( Graphics g ) {
redRose1.paintRose(g,10,10); // draw first RedRose
redRose2.backGroundColor = Color.blue; // use a blue background color
redRose2.paintRose(g,200,10); // draw another RedRose
}
}
Your assignment in this exercise is to create yet another class Rose. A partially completed program is given as follow:
import java.awt.*;
public class Rose {
//declare a constant field for green sepal
......
//declare instance variables that are attributes of Rose
//default color is red rose on white background
public Color backGroundColor = Color.white;
//declare a petalColor field
......
public void paintBackGround(Graphics g,int x,int y ) {
g.setColor(backGroundColor);
g.fillRect(x+10,y+10, 150, 450);
}
public void paintGreenSepal(Graphics g,int x,int y ) {
g.setColor(SEPAL_COLOR);
g.fillOval(x+38,y+138,40,40);
g.fillOval(x+68,y+138,40,40);
g.fillOval(x+38,y+168,40,40);
g.fillOval(x+68,y+168,40,40);
}
public void paintPetal(Graphics g,int x,int y ) {
//draw petal
g.setColor(petalColor);
......
}
public void paintPedicel( Graphics g,int x,int y ) {
//draw pedicel
g.setColor(Color.green);
g.fillRect(x+71,y+218,3,100);
}
public void paintLeave(Graphics g,int x,int y) {
......
}
public void paintRose( Graphics g,int x,int y ) {
paintBackGround(g,x,y);
paintGreenSepal(g,x,y);
paintPetal(g,x,y);
paintPedicel(g,x,y);
paintLeave(g,x,y);
}
}
In Rose class, you should do the following:
petalColor representing color of petals
paintPetal(Graphics g,int x,int y )
paintLeave(Graphics g,int x,int y)
Finaly, create ThreeRoseApplet to display three roses as shown below: