// Copyright MageLang Institute; Version $Id: //depot/main/src/edu/modules/Beans/magercises/StickFigureCustomizer/Solution/stickfigure/StickFigureCustomizer.java#5 $ package stickfigure; import java.awt.*; import java.awt.event.*; import java.beans.*; public class StickFigureCustomizer extends Panel implements Customizer, ItemListener { private StickFigure stickFigureObject; Checkbox neck, trunk, leftArm, rightArm, leftLeg, rightLeg, sunburned; CheckboxGroup mood; Checkbox happy, sad, ambivalent; private PropertyChangeSupport support; public StickFigureCustomizer() { support = new PropertyChangeSupport(this); setLayout(new BorderLayout()); Panel p1 = new Panel(new GridLayout(7, 1)); add(p1, BorderLayout.CENTER); p1.add(neck = new Checkbox("Neck")); neck.addItemListener(this); p1.add(trunk = new Checkbox("Trunk")); trunk.addItemListener(this); p1.add(leftArm = new Checkbox("Left Arm")); leftArm.addItemListener(this); p1.add(rightArm = new Checkbox("Right Arm")); rightArm.addItemListener(this); p1.add(leftLeg = new Checkbox("Left Leg")); leftLeg.addItemListener(this); p1.add(rightLeg = new Checkbox("Right Leg")); rightLeg.addItemListener(this); p1.add(sunburned = new Checkbox("Sunburned")); sunburned.addItemListener(this); Panel p2 = new Panel(new BorderLayout()); add(p2, BorderLayout.SOUTH); p2.add(new Label("Mood:"), BorderLayout.WEST); Panel moodPanel; p2.add(moodPanel = new Panel(), BorderLayout.EAST); mood = new CheckboxGroup(); moodPanel.add(happy = new Checkbox(StickFigure.HAPPY_STR, true, mood)); moodPanel.add(sad = new Checkbox(StickFigure.SAD_STR, false, mood)); moodPanel.add(ambivalent = new Checkbox(StickFigure.AMBIVALENT_STR, false, mood)); happy.addItemListener(this); sad.addItemListener(this); ambivalent.addItemListener(this); } public void setObject(Object obj) { stickFigureObject = (StickFigure) obj; if (stickFigureObject.getMood() == StickFigure.HAPPY) mood.setSelectedCheckbox(happy); else if (stickFigureObject.getMood() == StickFigure.SAD) mood.setSelectedCheckbox(sad); else if (stickFigureObject.getMood() == StickFigure.AMBIVALENT) mood.setSelectedCheckbox(ambivalent); neck.setState(stickFigureObject.getNeck()); trunk.setState(stickFigureObject.getTrunk()); leftArm.setState(stickFigureObject.getLeftArm()); rightArm.setState(stickFigureObject.getRightArm()); leftLeg.setState(stickFigureObject.getLeftLeg()); rightLeg.setState(stickFigureObject.getRightLeg()); sunburned.setState(stickFigureObject.isSunburned()); } public void itemStateChanged(ItemEvent e) { Checkbox cb = (Checkbox) e.getSource(); if (cb == happy) { stickFigureObject.setMood(StickFigure.HAPPY); support.firePropertyChange("mood", null, null); } else if (cb == sad) { stickFigureObject.setMood(StickFigure.SAD); support.firePropertyChange("mood", null, null); } else if (cb == ambivalent) { stickFigureObject.setMood(StickFigure.AMBIVALENT); support.firePropertyChange("mood", null, null); } else if (cb == neck) { stickFigureObject.setNeck(cb.getState()); } else if (cb == trunk) { stickFigureObject.setTrunk(cb.getState()); } else if (cb == leftArm) { stickFigureObject.setLeftArm(cb.getState()); } else if (cb == rightArm) { stickFigureObject.setRightArm(cb.getState()); } else if (cb == leftLeg) { stickFigureObject.setLeftLeg(cb.getState()); } else if (cb == rightLeg) { stickFigureObject.setRightLeg(cb.getState()); } else if (cb == sunburned) { stickFigureObject.setSunburned(cb.getState()); support.firePropertyChange("sunburned", null, null); } } public void addPropertyChangeListener( PropertyChangeListener l) { support.addPropertyChangeListener(l); } public void removePropertyChangeListener( PropertyChangeListener l) { support.removePropertyChangeListener(l); } }