/**
  * Constructor.
  *
  * @param value the value to edit.
  * @throws TagFormatException if the tag value cannot be retrieved with the expected type.
  */
 public RationalTagValueComponent(TagValue value) throws TagFormatException {
   super(new FlowLayout(FlowLayout.LEFT, 0, 0));
   m_value = value;
   Rational rational = m_value.getAsRational();
   m_numer = new JTextField("" + rational.numerator, 5);
   m_divider = new JLabel("/");
   m_denom = new JTextField("" + rational.denominator, 5);
   add(m_numer);
   add(m_divider);
   add(m_denom);
 }
 /**
  * Returns the editted value.
  *
  * @return the editted value.
  * @throws TagFormatException if the tag value cannot be retrieved with the expected type.
  */
 public TagValue getTagValue() throws TagFormatException {
   try {
     long numer = Long.parseLong(m_numer.getText());
     long denom = Long.parseLong(m_denom.getText());
     Rational rational = new Rational(numer, denom);
     return new TagValue(m_value.getTag(), rational);
   } catch (NumberFormatException e) {
     e.printStackTrace();
     throw new TagFormatException(
         m_numer.getText() + "/" + m_denom.getText() + " is not a valid rational");
   }
 }