/** Overriden to unconditionally allow the replace if ignoreDocumentMutate is true. */
 void replace(
     DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
     throws BadLocationException {
   if (ignoreDocumentMutate) {
     fb.replace(offset, length, text, attrs);
     return;
   }
   super.replace(fb, offset, length, text, attrs);
 }
 /**
  * Installs the <code>DefaultFormatter</code> onto a particular <code>JFormattedTextField</code>.
  * This will invoke <code>valueToString</code> to convert the current value from the <code>
  * JFormattedTextField</code> to a String. This will then install the <code>Action</code>s from
  * <code>getActions</code>, the <code>DocumentFilter</code> returned from <code>getDocumentFilter
  * </code> and the <code>NavigationFilter</code> returned from <code>getNavigationFilter</code>
  * onto the <code>JFormattedTextField</code>.
  *
  * <p>Subclasses will typically only need to override this if they wish to install additional
  * listeners on the <code>JFormattedTextField</code>.
  *
  * <p>If there is a <code>ParseException</code> in converting the current value to a String, this
  * will set the text to an empty String, and mark the <code>JFormattedTextField</code> as being in
  * an invalid state.
  *
  * <p>While this is a public method, this is typically only useful for subclassers of <code>
  * JFormattedTextField</code>. <code>JFormattedTextField</code> will invoke this method at the
  * appropriate times when the value changes, or its internal state changes.
  *
  * @param ftf JFormattedTextField to format for, may be null indicating uninstall from current
  *     JFormattedTextField.
  */
 public void install(JFormattedTextField ftf) {
   super.install(ftf);
   updateMaskIfNecessary();
   // invoked again as the mask should now be valid.
   positionCursorAtInitialLocation();
 }
 /** Overriden to update the mask after invoking supers implementation. */
 void updateValue(Object value) {
   super.updateValue(value);
   updateMaskIfNecessary();
 }
  public FormatTestFrame() {
    JPanel buttonPanel = new JPanel();
    okButton = new JButton("Ok");
    buttonPanel.add(okButton);
    add(buttonPanel, BorderLayout.SOUTH);

    mainPanel = new JPanel();
    mainPanel.setLayout(new GridLayout(0, 3));
    add(mainPanel, BorderLayout.CENTER);

    JFormattedTextField intField = new JFormattedTextField(NumberFormat.getIntegerInstance());
    intField.setValue(new Integer(100));
    addRow("Number:", intField);

    JFormattedTextField intField2 = new JFormattedTextField(NumberFormat.getIntegerInstance());
    intField2.setValue(new Integer(100));
    intField2.setFocusLostBehavior(JFormattedTextField.COMMIT);
    addRow("Number (Commit behavior):", intField2);

    JFormattedTextField intField3 =
        new JFormattedTextField(
            new InternationalFormatter(NumberFormat.getIntegerInstance()) {
              protected DocumentFilter getDocumentFilter() {
                return filter;
              }
            });
    intField3.setValue(new Integer(100));
    addRow("Filtered Number", intField3);

    JFormattedTextField intField4 = new JFormattedTextField(NumberFormat.getIntegerInstance());
    intField4.setValue(new Integer(100));
    intField4.setInputVerifier(
        new InputVerifier() {
          public boolean verify(JComponent component) {
            JFormattedTextField field = (JFormattedTextField) component;
            return field.isEditValid();
          }
        });
    addRow("Verified Number:", intField4);

    JFormattedTextField currencyField = new JFormattedTextField(NumberFormat.getCurrencyInstance());
    currencyField.setValue(new Double(10));
    addRow("Currency:", currencyField);

    JFormattedTextField dateField = new JFormattedTextField(DateFormat.getDateInstance());
    dateField.setValue(new Date());
    addRow("Date (default):", dateField);

    DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT);
    format.setLenient(false);
    JFormattedTextField dateField2 = new JFormattedTextField(format);
    dateField2.setValue(new Date());
    addRow("Date (short, not lenient):", dateField2);

    try {
      DefaultFormatter formatter = new DefaultFormatter();
      formatter.setOverwriteMode(false);
      JFormattedTextField urlField = new JFormattedTextField(formatter);
      urlField.setValue(new URL("http://java.sun.com"));
      addRow("URL:", urlField);
    } catch (MalformedURLException ex) {
      ex.printStackTrace();
    }

    try {
      MaskFormatter formatter = new MaskFormatter("###-##-####");
      formatter.setPlaceholderCharacter('0');
      JFormattedTextField ssnField = new JFormattedTextField(formatter);
      ssnField.setValue("078-05-1120");
      addRow("SSN Mask:", ssnField);
    } catch (ParseException ex) {
      ex.printStackTrace();
    }

    JFormattedTextField ipField = new JFormattedTextField(new IPAddressFormatter());
    ipField.setValue(new byte[] {(byte) 130, 65, 86, 66});
    addRow("IP Address:", ipField);
    pack();
  }