import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;public class TestJFormattedTextField2
{
JFrame mainWin=new JFrame("测试格式化文本框");
JPanel mainPanel=new JPanel();
JPanel buttonPanel=new JPanel();
JButton okButton=new JButton("显示文本框值");
public void init()
{
mainPanel.setLayout(new GirdLayout(1 , 3));
mainWin.add(mainPanel);
buttonPanel.add(okButton);
mainWin.add(buttonPanel , BorderLayout.SOUTH);
JFormattedTextField intField0=new JFormattedTextField(
new InternationalFormatter(NumberFormat.getIntegerInstance())
{
//重写DocumentFilter的方法,返回定制的过滤器
protected DocumentFilter getDocumentFilter()
{
return new NumberFilter();
}
});
intField0.setValue(100);
addRow("只接受数字的文本框:" , intField0);
JFormattedTextField intField1=new JFormattedTextField(
NumberFormat.getIntegerInstance());
intField1.setValue(1000);
intField1.setVerifier(new NumberVerifier());
addRow("带输入校验器的文本框:" , intField1);
IPAddressFormatter ipFormat=new IPAddressFormatter();
JFormattedTextField ipField=new JFormattedTextField(ipFormat);
ipFormat.setValue(new byte[]{(byte)192 , (byte)168 , 0 , 1});
addRow("ip地址格式器:" , ipField);
mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWin.pack();
mainWin.setVisible(true);
}
//定制自己的过滤器
class NumberFilter extends DocumentFilter
{
//重写DocumentFilter的三个中的两个方法
public void insertString(FilterBypass filter ,
int offset, String string, AttributeSet attr)throws BadLocationException
{
StringBuilder builder=new Stringbuilder(string);
intFilter(builder);
super.insertString(filter, offset, string, attr);
} public void replace(FilterBypass filter ,
int offset, String string, AttributeSet attr)throws BadLocationException
{
if(string != null)
{
StringBuilder builder=new Stringbuilder(string);
intFilter(builder);
}
super.replace(filter, offset, string, attr);
}
//过滤字符,把非0-9的字符删除
public void intFilter(StringBuilder builder)
{
for(int i=builder.length -1; i >= 0; i--)
{
int cp=builder.codePointAt(i);
if(cp < '0' || cp > '9')
{
builder.deleteCharAt(i);
}
{
}
} //定制输入校验器
class NumberVerifier extends InputVerify
{
//当组件失去焦点时触发
public boolean verify(JComment input)
{
JFormatterTextField field=(JFormatterTextField)input;
return field.isEditValid();
}
} //定制ip地址formatter
class IPAddressFormatter extends DefaultFormatter
{
public Object stringToValue(String string)throws ParseException
{
String[] nums=string.split(".");
if(nums.length != 4)
{
throw new ParseException("IP地址必须是4个整数", 0);
}
byte[] a=new byte[4];
for(int i=0; i < nums.length; i++)
{
try
{
int b=Integer.valueOf(nums[i]);
}
catch(NumberFormatException e)
{
throw new ParseException("IP地址必须是整数" , 0);
}
if(b < 0 || b > 255)
{
throw new ParseException("IP地址必须是0-255之间" , 0);
}
a[i]=(byte)b;
}
return a;
}
public String valueToString(Object value)throws ParseException
{
if(!(value instanceof byte[]))
{
throw new ParseException("IP地址必须是byte数组" , 0);
}
byte[] b=(byte[])value;
if(b.length != 4)
{
throw new ParseException("IP地址必须是4个整数" , 0);
}
StringBuilder builder=new StringBuilder();
for(int i=0; i < b.length; i++)
{
if(i > 0) builder.append('.');
if(b[i] > 255 || b[i] < 0)
{
throw new ParseException("IP地址必须是0-255之间" , 0);
}
else
{
int a=b[i];
builder.append(Stirng.valueOf(a));
}
}
}
}
public void addRow(String label , final JFormattedTextField field)
{
final JLabel text=new JLabel();
mainPanel.add(new JLabel(label));
mainPanel.add(field);
mainPanel.add(text);
//为按钮添加监听器
okButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Object object=field.getValue();
if(object.getClass().isArray())
{
for(int i=0 ; i < object.length ; i++)
{
String str=field.valueToString(object[i]);
text.setText(str);
}
}
else
{
text.setText(object.toString());
}
}
});
}
public static void main(String[] args)
{
new TestJFormattedTextField2().init();
}
}问题如标题所示,main方法也是如此
求帮忙,谢谢!
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;public class TestJFormattedTextField2
{
JFrame mainWin=new JFrame("测试格式化文本框");
JPanel mainPanel=new JPanel();
JPanel buttonPanel=new JPanel();
JButton okButton=new JButton("显示文本框值");
public void init()
{
mainPanel.setLayout(new GirdLayout(1 , 3));
mainWin.add(mainPanel);
buttonPanel.add(okButton);
mainWin.add(buttonPanel , BorderLayout.SOUTH);
JFormattedTextField intField0=new JFormattedTextField(
new InternationalFormatter(NumberFormat.getIntegerInstance())
{
//重写DocumentFilter的方法,返回定制的过滤器
protected DocumentFilter getDocumentFilter()
{
return new NumberFilter();
}
});
intField0.setValue(100);
addRow("只接受数字的文本框:" , intField0);
JFormattedTextField intField1=new JFormattedTextField(
NumberFormat.getIntegerInstance());
intField1.setValue(1000);
intField1.setVerifier(new NumberVerifier());
addRow("带输入校验器的文本框:" , intField1);
IPAddressFormatter ipFormat=new IPAddressFormatter();
JFormattedTextField ipField=new JFormattedTextField(ipFormat);
ipFormat.setValue(new byte[]{(byte)192 , (byte)168 , 0 , 1});
addRow("ip地址格式器:" , ipField);
mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWin.pack();
mainWin.setVisible(true);
}
//定制自己的过滤器
class NumberFilter extends DocumentFilter
{
//重写DocumentFilter的三个中的两个方法
public void insertString(FilterBypass filter ,
int offset, String string, AttributeSet attr)throws BadLocationException
{
StringBuilder builder=new Stringbuilder(string);
intFilter(builder);
super.insertString(filter, offset, string, attr);
} public void replace(FilterBypass filter ,
int offset, String string, AttributeSet attr)throws BadLocationException
{
if(string != null)
{
StringBuilder builder=new Stringbuilder(string);
intFilter(builder);
}
super.replace(filter, offset, string, attr);
}
//过滤字符,把非0-9的字符删除
public void intFilter(StringBuilder builder)
{
for(int i=builder.length -1; i >= 0; i--)
{
int cp=builder.codePointAt(i);
if(cp < '0' || cp > '9')
{
builder.deleteCharAt(i);
}
{
}
} //定制输入校验器
class NumberVerifier extends InputVerify
{
//当组件失去焦点时触发
public boolean verify(JComment input)
{
JFormatterTextField field=(JFormatterTextField)input;
return field.isEditValid();
}
} //定制ip地址formatter
class IPAddressFormatter extends DefaultFormatter
{
public Object stringToValue(String string)throws ParseException
{
String[] nums=string.split(".");
if(nums.length != 4)
{
throw new ParseException("IP地址必须是4个整数", 0);
}
byte[] a=new byte[4];
for(int i=0; i < nums.length; i++)
{
try
{
int b=Integer.valueOf(nums[i]);
}
catch(NumberFormatException e)
{
throw new ParseException("IP地址必须是整数" , 0);
}
if(b < 0 || b > 255)
{
throw new ParseException("IP地址必须是0-255之间" , 0);
}
a[i]=(byte)b;
}
return a;
}
public String valueToString(Object value)throws ParseException
{
if(!(value instanceof byte[]))
{
throw new ParseException("IP地址必须是byte数组" , 0);
}
byte[] b=(byte[])value;
if(b.length != 4)
{
throw new ParseException("IP地址必须是4个整数" , 0);
}
StringBuilder builder=new StringBuilder();
for(int i=0; i < b.length; i++)
{
if(i > 0) builder.append('.');
if(b[i] > 255 || b[i] < 0)
{
throw new ParseException("IP地址必须是0-255之间" , 0);
}
else
{
int a=b[i];
builder.append(Stirng.valueOf(a));
}
}
}
}
public void addRow(String label , final JFormattedTextField field)
{
final JLabel text=new JLabel();
mainPanel.add(new JLabel(label));
mainPanel.add(field);
mainPanel.add(text);
//为按钮添加监听器
okButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Object object=field.getValue();
if(object.getClass().isArray())
{
for(int i=0 ; i < object.length ; i++)
{
String str=field.valueToString(object[i]);
text.setText(str);
}
}
else
{
text.setText(object.toString());
}
}
});
}
public static void main(String[] args)
{
new TestJFormattedTextField2().init();
}
}问题如标题所示,main方法也是如此
求帮忙,谢谢!
final 有错、、、、
去掉final也是同样的错误...