gpt4 book ai didi

java - 按 JTextField 值过滤 JTable 行

转载 作者:行者123 更新时间:2023-12-01 06:53:23 26 4
gpt4 key购买 nike

我在 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);
}

最佳答案

您正在 UserPage_Admin() 构造函数中调用 RowFilter.regexFilter(filterTF.getText(), 0); 。它应该如何从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));
}
}
});

如果您想对用户按键类型事件进行过滤,请添加 key listener到您要输入过滤字符串的文本字段。

filterTxtFeild.addKeyListener(new KeyAdapter() {
public void keykeyReleased(KeyEvent evt) {
// on each key type event filter.
// put your filter code as submit button
}
});

但是,正如下面的评论中所建议的,要使用 Swing 文本组件,应该使用 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) {}
});

编辑:为什么 DocumentListener 更可取?

如果我们想要验证数据源中的输入,请在过滤数据时使用KeyEvent,您会发现它不会反射(reflect)用户的击键,并且输入事件在处理之前会发送到监听器通过数据源。假设当我们想要输入用户名时,有人输入了类似“$%^&”的文本。对于此类无效输入,即使未对数据源进行有效更改,KeyEvent 仍将被触发。但是,仅当对数据源进行有效更改时,DocumentListeners 才会收到通知。数据输入组件生成 validator 可以异步监听的事件,但绝对不应该 modify the contents DocumentListener 中的文本组件。如果我们这样做,程序可能会陷入僵局。

关于java - 按 JTextField 值过滤 JTable 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19364436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com