Saj*_*jad 0 java swing jtable jtextfield rowfilter
我在JTextfield上输入了一个名字,但是我的桌子没有过滤任何东西!
我的代码:
public class UserPage_Admin extends JFrame {
JTable table;
UserModel model;
public UserPage_Admin() {
model = new UserModel(...);
TableRowSorter sorter = new TableRowSorter<TableModel>(model);
table = new JTable(model);
table.setRowSorter(sorter);
add(new JScrollPane(table), BorderLayout.CENTER);
add(panelForm(), BorderLayout.PAGE_START);
RowFilter<UserModel, Object> rf = null;
try {
rf = RowFilter.regexFilter(filterTF.getText(), 0);
} catch (PatternSyntaxException pse) {
return;
}
sorter.setRowFilter(rf);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(850, 600);
setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
你RowFilter.regexFilter(filterTF.getText(), 0);在UserPage_Admin() 构造函数中调用.它应该如何从filterTF 读取文本.我认为你应该从分配给一个动作事件监听器调用它,JButton在提交(点击)文本时将调用它,如下所示:
submitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String text = filterText.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
sorter.setRowFilter(RowFilter.regexFilter(text, 0));
}
}
});
Run Code Online (Sandbox Code Playgroud)
如果要对用户键类型事件使用过滤,请将键侦听器添加到要输入过滤器字符串的文本字段中.
filterTxtFeild.addKeyListener(new KeyAdapter() {
public void keykeyReleased(KeyEvent evt) {
// on each key type event filter.
// put your filter code as submit button
}
});
Run Code Online (Sandbox Code Playgroud)
但是,正如下面的评论中所建议的那样,要使用Swing Text Component,应该使用Document.addDocumentListener(DocumentListener).Swing文本组件使用Document来表示其内容.当文档内容以任何方式更改时,都会发生文档事件.添加文档侦听器,如下所示:
filterTxtFeild.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
// put your filter code here upon data insertion
}
@Override
public void removeUpdate(DocumentEvent e)
{
//put your filter code here upon data removal
}
@Override
public void changedUpdate(DocumentEvent e) {}
});
Run Code Online (Sandbox Code Playgroud)
编辑:为什么DocumentListener更可取?
如果我们想要验证数据源中的输入,则KeyEvent在过滤数据时使用,您将发现它不会反映用户的击键,并且输入事件会在数据源处理之前发送给侦听器.假设当我们想要user name输入时,有人输入了一个文本"$%^&".在这样的无效输入上,KeyEvent即使没有对数据源进行有效更改,仍将被触发.但是,DocumentListeners仅在对数据源进行了有效更改时才会收到通知.数据输入组件产生validator可以监听的事件asynchronously,不应该从a内修改文本组件的内容DocumentListener.如果我们这样做,该程序可能会陷入僵局.
| 归档时间: |
|
| 查看次数: |
11453 次 |
| 最近记录: |