java – 使用DocumentFilter.FilterBypass
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用DocumentFilter.FilterBypass,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2632字,纯文字阅读大概需要4分钟。
内容图文
![java – 使用DocumentFilter.FilterBypass](/upload/InfoBanner/zyjiaocheng/711/e919e952b6d04ff28f04ae0178797d13.jpg)
我希望在DocumentFilter上有这样的方法
public void replaceUpdate(int offset, int length, String text) {
try {
super.replace(byPass, offset, length, text, null);
} catch (BadLocationException ex) {
//error
}
}
目前为了获得FilterBypass的实例(上面的方法中的byPass),我需要从重写的方法insertString获取:
private FilterBypass byPass;
@Override
public void insertString(DocumentFilter.FilterBypass fb,
int offset, String string, AttributeSet att)
throws BadLocationException {
byPass = fb;
//some stuff here
super.insertString(fb, offset, string, att);
}
但这给我带来了一些问题.任何人都可以建议一些不同的方式获得FilterBypass?我找不到一种方法来获得对FilterBypass的引用.
如果我要覆盖它的方法应该怎么做?
解决方法:
例如,这是一个带有DocumentFilter的SSCCE,它可以防止用户在文档中键入数字,但允许Swing Timer这样做.
import java.awt.event.*;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.text.*;
public class DocFilterPanel extends JPanel {
private JTextArea textArea = new JTextArea(12, 50);
private MyDocFilter myDocFilter = new MyDocFilter();
public DocFilterPanel() {
((PlainDocument) textArea.getDocument()).setDocumentFilter(myDocFilter);
int vsbPolicy = JScrollPane.VERTICAL_SCROLLBAR_ALWAYS;
int hsbPolicy = JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED;
add(new JScrollPane(textArea, vsbPolicy , hsbPolicy));
int timerDelay = 1000;
new Timer(timerDelay , new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
myDocFilter.setFilter(false);
textArea.append("12345\n");
myDocFilter.setFilter(true);
}
}).start();
}
private static void createAndShowGui() {
DocFilterPanel docFilterPanel = new DocFilterPanel();
JFrame frame = new JFrame("DocFilterTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(docFilterPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class MyDocFilter extends DocumentFilter {
private static final String REMOVE_REGEX = "\\d";
private boolean filter = true;
public boolean isFilter() {
return filter;
}
public void setFilter(boolean filter) {
this.filter = filter;
}
@Override
public void insertString(FilterBypass fb, int offset, String text,
AttributeSet attr) throws BadLocationException {
if (filter) {
text = text.replaceAll(REMOVE_REGEX, "");
}
super.insertString(fb, offset, text, attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text,
AttributeSet attrs) throws BadLocationException {
if (filter) {
text = text.replaceAll(REMOVE_REGEX, "");
}
super.replace(fb, offset, length, text, attrs);
}
}
内容总结
以上是互联网集市为您收集整理的java – 使用DocumentFilter.FilterBypass全部内容,希望文章能够帮你解决java – 使用DocumentFilter.FilterBypass所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。