HomeDigital EditionSys-Con RadioSearch Java Cd
Advanced Java AWT Book Reviews/Excerpts Client Server Corba Editorials Embedded Java Enterprise Java IDE's Industry Watch Integration Interviews Java Applet Java & Databases Java & Web Services Java Fundamentals Java Native Interface Java Servlets Java Beans J2ME Libraries .NET Object Orientation Observations/IMHO Product Reviews Scalability & Performance Security Server Side Source Code Straight Talking Swing Threads Using Java with others Wireless XML
 

"JavaBeans Customized"
Volume: 4 Issue: 12, p.80

	

Listing 1:  The Clock Bean 

package mybeans; 
  

import java.awt.*; 
import java.util.*; 
import java.text.*; 
import javax.swing.*; 
import java.io.*; 
  

public class Clock extends JLabel 
     implements Runnable, Serializable{ 
  DateFormat formatter12; 
  DateFormat formatter24; 
  private boolean running; 
  private boolean isTwentyFourHourTime; 
  

  public Clock() { 
    formatter12 = 
     new SimpleDateFormat("h:mm:ss a"); 
    formatter24 = 
         new SimpleDateFormat("H:mm:ss"); 
    setRunning(true); 
  } 
  

  public void run() { 
  while(running) 
  { 
   if (isTwentyFourHourTime()) 
    this.setText( 
     formatter24.format(new Date())); 
    else 
     this.setText( 
      formatter12.format(new Date())); 
     try { 
       Thread.sleep(1000); 
     } 
     catch (InterruptedException e) {} 
   } 
} 
  

// The running property should be hidden 
public void setRunning(boolean newRunning) { 
  boolean  oldRunning = running; 
  running = newRunning; 
  Thread t = new Thread(this); 
  t.start(); 
  firePropertyChange("running", 
              new Boolean(oldRunning), 
              new Boolean(newRunning)); 
} 
  

public boolean isRunning() { 
  return running; 
} 
  

// The twentyFourHourTime property 
// should be exposed 
public void setTwentyFourHourTime( 
       boolean newTwentyFourHourTime) { 
boolean  oldTwentyFourHourTime = 
       isTwentyFourHourTime; 
isTwentyFourHourTime = newTwenty- 
FourHourTime; 
firePropertyChange("twentyFourHourTime", 
    new Boolean(oldTwentyFourHourTime), 
    new Boolean(newTwentyFourHourTime)); 
} 
  

public boolean isTwentyFourHourTime() { 
  return isTwentyFourHourTime; 
} 
} 
  

Listing 2:  The Property Editor 

package mybeans; 
  

import java.beans.*; 
  

public class ClockPropertyEditor 
    extends PropertyEditorSupport { 
  

  private boolean is_24 = false; 
  

  public ClockPropertyEditor() { 
  } 
  

  public String getAsText() { 
    return (is_24 ? "24 hour" : "12 
    hour"); 
  } 
  

  public Object getValue() { 
    return new Boolean(is_24); 
  } 
  

  public void setAsText(String value) 
         throws IllegalArgumentException { 
    if (value.equals("24 hour")) 
      setValue(new Boolean(true)); 
    else if (value.equals("12 hour")) 
      setValue(new Boolean(false)); 
    else 
      throw new IllegalArgumentException( 
                "Unrecognized value: " + value); 
  } 
  

  public void setValue(Object value) { 
    Boolean b = (Boolean)value; 
    is_24 = b.booleanValue(); 
    firePropertyChange(); 
  } 
  

  public String[] getTags() { 
    String [] tags = {"24 hour", "12 hour"}; 
    return tags; 
  } 
} 
  

Listing 3:  The ClockBeanInfo Class 

package mybeans; 
  

import java.beans.*; 
  

public class ClockBeanInfo 
       extends SimpleBeanInfo { 
  public ClockBeanInfo() { 
  } 
  

  public 
  PropertyDescriptor[] getPropertyDescriptors() { 
    try  { 
      // PropertyDescriptor for the 
      // "twentyFourHourTime" property 
      PropertyDescriptor pd1 = 
        new PropertyDescriptor( 
            "twentyFourHourTime", 
             Clock.class, 
            "isTwentyFourHourTime", 
            "setTwentyFourHourTime"); 
      pd1.setDisplayName("Time Format"); 
      pd1.setShortDescription( 
        "Controls whether the time is "+ 
        "displayed in 12 or 24 hour mode"); 
      pd1.setBound(true); 
      pd1.setPropertyEditorClass( 
        ClockPropertyEditor.class); 
  

      // PropertyDescriptor to hide the 
      // "running" property 
      PropertyDescriptor pd2 = 
        new PropertyDescriptor( 
            "running", 
            Clock.class, 
            "isRunning", 
            "setRunning"); 
      pd2.setHidden(true); 
  

      PropertyDescriptor[] pds = new PropertyDescriptor[] {pd1, pd2}; 
      return pds; 
    } 
    catch(IntrospectionException ex) { 
      return null; 
    } 
  } 
  

  public BeanDescriptor getBeanDescriptor() { 
    return new BeanDescriptor( 
      Clock.class, 
      ClockCustomizer.class); 
  } 
  

  public java.awt.Image getIcon(int iconKind) { 
    switch (iconKind) { 
      case BeanInfo.ICON_COLOR_16x16: 
        return loadImage("Clock16x16Color.gif"); 
      case BeanInfo.ICON_COLOR_32x32: 
        return loadImage("Clock32x32Color.gif"); 
      case BeanInfo.ICON_MONO_16x16: 
        return loadImage("Clock16x16Mono.gif"); 
      case BeanInfo.ICON_MONO_32x32: 
        return loadImage("Clock32x32Mono.gif"); 
    } 
    return null; 
  } 
  

  public BeanInfo[] getAdditionalBeanInfo() { 
    Class superclass = Clock.class.getSuperclass(); 
    try  { 
      BeanInfo superBeanInfo = Introspector.getBeanInfo(superclass); 
      return new BeanInfo[] { superBeanInfo }; 
    } 
    catch(IntrospectionException ex) { 
      return null; 
    } 
  } 
} 
  

Listing 4:  The Clock Customizer 

package mybeans; 
  

import java.awt.*; 
import java.beans.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 
  

public class ClockCustomizer extends JPanel 
                      implements Customizer{ 
  protected Clock theClockBean = null; 
  private JRadioButton button24 = 
      new JRadioButton("24 Hour Mode"); 
  private JRadioButton button12 = 
      new JRadioButton("12 Hour Mode"); 
  

  public ClockCustomizer() { 
    JLabel topLabel = new JLabel(); 
    topLabel.setFont( 
      new java.awt.Font("Dialog", 1, 20)); 
    topLabel.setHorizontalAlignment( 
      SwingConstants.CENTER); 
    topLabel.setText( 
      "This controls the mode of the clock"); 
    this.setLayout(new BorderLayout()); 
    button24.addChangeListener( 
      new ChangeListener() { 
        public void stateChanged(ChangeEvent e) { 
          button24Changed(e);}}); 
    this.add(topLabel, BorderLayout.NORTH); 
    JPanel radioPanel = new JPanel(); 
    this.add(radioPanel, BorderLayout.CENTER); 
    radioPanel.add(button24, null); 
    radioPanel.add(button12, null); 
    ButtonGroup grp = new ButtonGroup(); 
    grp.add(button12); 
    grp.add(button24); 
    button12.setSelected(true); 
  } 
  

  public void setObject(Object bean) { 
    theClockBean = (Clock)bean; 
    button24.setSelected( 
      theClockBean.isTwentyFourHourTime()); 
  } 
  

  void button24Changed(ChangeEvent e) { 
    theClockBean.setTwentyFourHourTime( 
      button24.isSelected()); 
  } 
} 
  

  
  
      
 

All Rights Reserved
Copyright ©  2004 SYS-CON Media, Inc.
  E-mail: [email protected]

Java and Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. SYS-CON Publications, Inc. is independent of Sun Microsystems, Inc.