Mega Code Archive

 
Categories / Java by API / Javax Swing Text
 

Extends DocumentFilter (Interger filter)

import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.text.AbstractDocument; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.DocumentFilter; public class MainClass {   public static void main(String args[]) {     JFrame frame = new JFrame("Range Example");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setLayout(new GridLayout(3, 2));     frame.add(new JLabel("Range: 0-255"));     JTextField textFieldOne = new JTextField();     Document textDocOne = textFieldOne.getDocument();     DocumentFilter filterOne = new IntegerRangeDocumentFilter(0, 255);     ((AbstractDocument) textDocOne).setDocumentFilter(filterOne);     frame.add(textFieldOne);     frame.setSize(250, 150);     frame.setVisible(true);   } } class IntegerRangeDocumentFilter extends DocumentFilter {   int minimum, maximum;   int currentValue = 0;   public IntegerRangeDocumentFilter(int minimum, int maximum) {     this.minimum = minimum;     this.maximum = maximum;   }   public void insertString(DocumentFilter.FilterBypass fb, int offset, String string,       AttributeSet attr) throws BadLocationException {     if (string == null) {       return;     } else {       String newValue;       Document doc = fb.getDocument();       int length = doc.getLength();       if (length == 0) {         newValue = string;       } else {         String currentContent = doc.getText(0, length);         StringBuffer currentBuffer = new StringBuffer(currentContent);         currentBuffer.insert(offset, string);         newValue = currentBuffer.toString();       }       currentValue = checkInput(newValue, offset);       fb.insertString(offset, string, attr);     }   }   public void remove(DocumentFilter.FilterBypass fb, int offset, int length)       throws BadLocationException {     Document doc = fb.getDocument();     int currentLength = doc.getLength();     String currentContent = doc.getText(0, currentLength);     String before = currentContent.substring(0, offset);     String after = currentContent.substring(length + offset, currentLength);     String newValue = before + after;     currentValue = checkInput(newValue, offset);     fb.remove(offset, length);   }   public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text,       AttributeSet attrs) throws BadLocationException {     Document doc = fb.getDocument();     int currentLength = doc.getLength();     String currentContent = doc.getText(0, currentLength);     String before = currentContent.substring(0, offset);     String after = currentContent.substring(length + offset, currentLength);     String newValue = before + (text == null ? "" : text) + after;     currentValue = checkInput(newValue, offset);     fb.replace(offset, length, text, attrs);   }   private int checkInput(String proposedValue, int offset) throws BadLocationException {     int newValue = 0;     if (proposedValue.length() > 0) {       try {         newValue = Integer.parseInt(proposedValue);       } catch (NumberFormatException e) {         throw new BadLocationException(proposedValue, offset);       }     }     if ((minimum <= newValue) && (newValue <= maximum)) {       return newValue;     } else {       throw new BadLocationException(proposedValue, offset);     }   } }