package flexlabel; import java.awt.*; import java.awt.event.*; import java.beans.*; public class FlexLabelCustomizer extends Panel implements Customizer, ActionListener, ItemListener { private FlexLabel flexLabelObject; private TextField file; private TextArea label; private Button updateImage, updateLabel; private CheckboxGroup align, position; private Checkbox alignLeft, alignCenter, alignRight; private Checkbox imageLeft, imageRight, imageTop, imageBottom; private PropertyChangeSupport support; public FlexLabelCustomizer() { support = new PropertyChangeSupport(this); setLayout(new BorderLayout()); Panel imagePanel = new Panel(new BorderLayout()); add(imagePanel, BorderLayout.NORTH); imagePanel.add(file = new TextField(40), BorderLayout.CENTER); file.addActionListener(this); Panel imageButtonPanel = new Panel(); imagePanel.add(imageButtonPanel, BorderLayout.SOUTH); imageButtonPanel.add(updateImage = new Button("Update Image")); updateImage.addActionListener(this); Panel labelPanel = new Panel(new BorderLayout()); add(labelPanel, BorderLayout.CENTER); labelPanel.add(label = new TextArea(5, 40), BorderLayout.CENTER); Panel labelButtonPanel = new Panel(); labelPanel.add(labelButtonPanel, BorderLayout.SOUTH); labelButtonPanel.add(updateLabel = new Button("Update Label")); updateLabel.addActionListener(this); Panel radioPanel = new Panel(new GridLayout(2, 1)); add(radioPanel, BorderLayout.SOUTH); Panel ap = new Panel(new BorderLayout()); radioPanel.add(ap, BorderLayout.NORTH); Panel ip = new Panel(new BorderLayout()); radioPanel.add(ip, BorderLayout.SOUTH); ap.add(new Label("Alignment:"), BorderLayout.WEST); Panel alignPanel; ap.add(alignPanel = new Panel(), BorderLayout.CENTER); align = new CheckboxGroup(); alignPanel.add(alignLeft = new Checkbox("Left", false, align)); alignPanel.add(alignCenter = new Checkbox("Center", true, align)); alignPanel.add(alignRight = new Checkbox("Right", false, align)); alignLeft.addItemListener(this); alignCenter.addItemListener(this); alignRight.addItemListener(this); ip.add(new Label("Image Position:"), BorderLayout.WEST); Panel positionPanel; ip.add(positionPanel = new Panel(), BorderLayout.CENTER); position = new CheckboxGroup(); positionPanel.add(imageLeft = new Checkbox("Left", false, position)); positionPanel.add(imageRight = new Checkbox("Right", false, position)); positionPanel.add(imageTop = new Checkbox("Top", true, position)); positionPanel.add(imageBottom = new Checkbox("Bottom", false, position)); imageLeft.addItemListener(this); imageRight.addItemListener(this); imageTop.addItemListener(this); imageBottom.addItemListener(this); } public void setObject(Object obj) { flexLabelObject = (FlexLabel) obj; if (flexLabelObject.getAlignment() == FlexLabel.ALIGN_LEFT) align.setSelectedCheckbox(alignLeft); else if (flexLabelObject.getAlignment() == FlexLabel.ALIGN_CENTER) align.setSelectedCheckbox(alignCenter); else if (flexLabelObject.getAlignment() == FlexLabel.ALIGN_RIGHT) align.setSelectedCheckbox(alignRight); if (flexLabelObject.getImagePosition() == FlexLabel.IMAGE_LEFT) position.setSelectedCheckbox(imageLeft); else if (flexLabelObject.getImagePosition() == FlexLabel.IMAGE_RIGHT) position.setSelectedCheckbox(imageRight); else if (flexLabelObject.getImagePosition() == FlexLabel.IMAGE_TOP) position.setSelectedCheckbox(imageTop); else if (flexLabelObject.getImagePosition() == FlexLabel.IMAGE_BOTTOM) position.setSelectedCheckbox(imageBottom); label.setText(flexLabelObject.getLabelWithLinefeeds()); } public void itemStateChanged(ItemEvent e) { Checkbox cb = (Checkbox) e.getSource(); if (cb == alignLeft) { flexLabelObject.setAlignment(FlexLabel.ALIGN_LEFT); support.firePropertyChange("alignment", null, null); } else if (cb == alignCenter) { flexLabelObject.setAlignment(FlexLabel.ALIGN_CENTER); support.firePropertyChange("alignment", null, null); } else if (cb == alignRight) { flexLabelObject.setAlignment(FlexLabel.ALIGN_RIGHT); support.firePropertyChange("alignment", null, null); } else if (cb == imageLeft) { flexLabelObject.setImagePosition(FlexLabel.IMAGE_LEFT); support.firePropertyChange("imagePosition", null, null); } else if (cb == imageRight) { flexLabelObject.setImagePosition(FlexLabel.IMAGE_RIGHT); support.firePropertyChange("imagePosition", null, null); } else if (cb == imageTop) { flexLabelObject.setImagePosition(FlexLabel.IMAGE_TOP); support.firePropertyChange("imagePosition", null, null); } else if (cb == imageBottom) { flexLabelObject.setImagePosition(FlexLabel.IMAGE_BOTTOM); support.firePropertyChange("imagePosition", null, null); } } public void actionPerformed(ActionEvent e) { if (e.getSource() == updateImage || e.getSource() == file) { flexLabelObject.setImageFile(file.getText()); support.firePropertyChange("imageFile", null, null); } else if (e.getSource() == updateLabel) { flexLabelObject.setLabel(label.getText()); support.firePropertyChange("label", null, null); } } public void addPropertyChangeListener( PropertyChangeListener l) { support.addPropertyChangeListener(l); } public void removePropertyChangeListener( PropertyChangeListener l) { support.removePropertyChangeListener(l); } }