Witam
Przepisałem sobie kod z "Java Core Techniki Zaawansowane" który miał nie pozwalac uzytkownikowi do wpisywania danych inncyh niz litery i znak '-'. Niestety ten program nie działa w ten sposób. Może ktoś wskazac błąd?
kod:
import java.awt.*;
import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.text.*;
public class Test {
public static void main(String args[]){
EventQueue.invokeLater(new Runnable(){
public void run(){
JFrame f = new JJFrame();
f.setVisible(true);
}
});
}
}
class JJFrame extends JFrame{
public JJFrame(){
JFormattedTextField field = new JFormattedTextField(new InternationalFormatter(NumberFormat.getIntegerInstance()){
protected DocumentFilter getDocumentFilter(){
return filter;
}
private DocumentFilter filter = new IntFilter();
});
add(field);
pack();
}
}
class IntFilter extends DocumentFilter{
public void insertString(FilterBypass fb,int offset,String string,AttributeSet set) throws BadLocationException{
StringBuilder builder = new StringBuilder(string);
System.out.println("dasdas");
for(int i = builder.length() -1; i>=0;i--){
int cp = builder.codePointAt(i);
if(!Character.isDigit(cp) || cp !='-'){
builder.deleteCharAt(cp);
if(Character.isSupplementaryCodePoint(cp)){
i--;
builder.deleteCharAt(i);
}
}
}
super.insertString(fb,offset,builder.toString(),set);
}
public void replaceString(FilterBypass fb,int offset,String string,AttributeSet set) throws BadLocationException{
StringBuilder builder = new StringBuilder(string);
for(int i = builder.length() -1; i>=0;i--){
int cp = builder.codePointAt(i);
if(!Character.isDigit(cp) || cp !='-'){
builder.deleteCharAt(cp);
if(Character.isSupplementaryCodePoint(cp)){
i--;
builder.deleteCharAt(i);
}
}
}
super.replace(fb,offset,offset, builder.toString(),set);
}
}