将变量传递给DocumentFilter
问题描述:
我正在创建一个自定义DocumentFilter
。我不得不在几个不同的组件上使用它。它们之间的区别仅在于字符限制,可以通过更改单个变量来改变。将变量传递给DocumentFilter
问题是,如何将该变量传递给DocumentFilter
?
这是我的自定义DocumentFilter
类(大部分的代码删除):
class DefaultDocFilter extends DocumentFilter
{
public void insertString(FilterBypass fb, int offs,
String str, AttributeSet a)
{
//do something with charLimit
}
public void replace(FilterBypass fb, int offs, int length,
String str, AttributeSet a)
{
//do something else with charLimit
}
}
主代码执行:
int charLimit = 40;
doc = (AbstractDocument) JTextArea.getDocument();
doc.setDocumentFilter(new DefaultDocFilter());
我如何通过charLimit
到DefaultDocFilter?
答
你可以简单地添加为成员变量:
class DefaultDocFilter extends DocumentFilter
{
private int charLimit = 40;
public void insertString(FilterBypass fb, int offs,
String str, AttributeSet a)
{
//do something with charLimit
}
public void replace(FilterBypass fb, int offs, int length,
String str, AttributeSet a)
{
//do something else with charLimit
}
public int getCharLimit() {
return charLimit;
}
public void setCharLimit(int charLimit) {
this.charLimit = charLimit;
}
}
则:
doc.setCharLimit(charLimit);
答
添加该变量给你的子类。
class DefaultDocFilter extends DocumentFilter
{
private final int charLimit;
public DefaultDocFilter(int charLimit) {
this.charLimit = charLimit;
}
public void insertString(FilterBypass fb, int offs,
String str, AttributeSet a)
{
//do something with charLimit
}
public void replace(FilterBypass fb, int offs, int length,
String str, AttributeSet a)
{
//do something else with charLimit
}
}
然后,当您添加的文件过滤器,只是构建一个新的与你的极限:
textField.getDocument().setDocumentFilter(new DefaultDocFilter(20));