//: c06:Car.java // From 'Thinking in Java, 2nd ed.' by Bruce Eckel // www.BruceEckel.com. See copyright notice in CopyRight.txt. // Composition with public objects. //:Car.java // // import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; import com.bruceeckel.swing.*; import com.bruceeckel.util.*; public class Car extends JApplet { JTextArea Xout = new JTextArea(8, 15); public void init() { Container cp = getContentPane(); cp.setLayout(new FlowLayout()); cp.add(new JLabel("Car")); cp.add(new JScrollPane(Xout)); XCar car = new XCar(); car.left.window.rollup(); car.wheel[0].inflate(32); } class Engine { public Engine (){ Xout.append("Engine created" +"\n"); } public void start() {} public void rev() {} public void stop() {} } class Wheel { private int Number; public Wheel (int i){ Number = i; Xout.append("Wheel " + Number + " created" +"\n"); } public void inflate(int psi) { Xout.append("Wheel " + Number + " inflated to:" + psi + "\n"); } } class Window { private int Number; public Window (int i){ Number = i; Xout.append("Window " + Number + " created" +"\n"); } public void rollup() { Xout.append("Window " + Number + " rolled Up\n"); } public void rolldown() { Xout.append("Window " + Number + " rolled Down\n"); } } class Door { private int Number; public Window window; public Door (int i){ Number = i; window = new Window(Number); Xout.append("Door " + Number + " created" +"\n"); } public void open() { Xout.append("Door " + Number + " open" +"\n"); } public void close() { Xout.append("Door " + Number + " close" +"\n"); } } class XCar { public Engine engine = new Engine(); public Wheel[] wheel = new Wheel[4]; public Door left = new Door(1), right = new Door(2); // 2-door public XCar() { for(int i = 0; i < 4; i++) wheel[i] = new Wheel(i+1); Xout.append("Car assembled" +"\n"); } } public static void main(String[] args) { Console.run(new Car(), 250, 200); } } ///: