我在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);
}
您正在呼叫RowFilter.regexFilter(filterTF.getText(), 0);
的UserPage_Admin()
构造。它应该如何从filterTF中读取 文本 。我认为您应该从分配给的Action Event
Listener调用它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));
}
}
});
如果要使用“根据用户键类型进行过滤”事件,请将键侦听器添加到您要输入过滤字符串的文本字段中。
filterTxtFeild.addKeyListener(new KeyAdapter() {
public void keykeyReleased(KeyEvent evt) {
// on each key type event filter.
// put your filter code as submit button
}
});
但是,正如下面的注释所建议的那样,要使用Swing Text Component,应使用
Document.addDocumentListener(DocumentListener)
。Swing文本组件使用文档来表示其内容。文档内容以任何方式更改时,都会发生文档事件。如下添加文档侦听器:
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
在过滤数据时使用,您会发现它不能反映用户的击键,并且输入事件在由数据源处理之前先发送给侦听器。假设当我们要user name
输入时,某人输入了类似的文本"$%^&"
。对于此类无效输入,KeyEvent
即使未对数据源进行任何有效更改,仍将被触发。但是,DocumentListeners
仅在对数据源进行了有效更改时才收到通知。数据输入组件会产生一个事件,其中一个validator
可以监听asynchronously
,一个人绝对不能从一个组件内修改文本组件的内容DocumentListener
。如果这样做,程序可能会死锁。
问题内容: 我有一个MySql表,我想查询其中 成对 的列在特定集中的行。例如,假设我的表格如下所示: 现在,我希望提取其中 (f1,f2) 对为(’a’,30)或(’b’,20)的行,即行2,3,4。我也希望使用“ IN”样式的过滤器来完成此操作,因为我可能有很多对要提取。如果我尝试类似的方法: 我得到IN子句中为f1和f2指定的值的笛卡尔积,即具有f1 =’a’或’b’的所有可能组合的行,以及
我的目标是通过拖放对tableview进行排序。我举了一个例子:http://docs.oracle.com/javafx/2/fxml_get_started/fxml_tutorial_intermediate.htm 对于拖放,我通过Scene Builder添加了fxml 制造了控制器 但是在drag Drop,我无法得到我扔下物体的那排位置。我得到的只是手机信息<代码>文本[Text=“
问题内容: 是否可以通过if条件执行多个分配,如以下代码? 问题答案: 否。根据规范,在if语句的开头仅允许一个“简单语句” 。 该建议的方法是这可能会返回一个错误,所以我想你想是多重考验:
利用通配符进行复杂的数据操作。 LIKE 与 REGEXP 操作符 当需要搜索产品文本中包含某个特定关键字的所有产品,使用通配符来创建比较特定的数据搜索模式。 通配符(wildcard) 用来匹配值的一部分特殊字符。 搜索模式(search pattern) 由字母值,通配符两租组合构成的搜索条件。 通配符是SQL的WHERE子句中的特殊含义字符,子句中使用通配符必须使用LIKE操作符。 百分号%
你可以使用内置的 yield* 操作符来组合多个 Sagas,使得它们保持顺序。 这让你可以一种简单的程序风格来排列你的 宏观任务(macro-tasks)。 function* playLevelOne(getState) { ... } function* playLevelTwo(getState) { ... } function* playLevelThree(getState) { .
好吧,这很难解释,但我会尽力的。 我在JTable中有一个JTextField和一个JComboBox,它的getCellEditor方法被覆盖如下: 以下是行为差异(请注意,从现在开始,当我说JTextField或JComboBox时,我指的是JTable中包含任一组件的单元格): > 当我使用tab键或箭头键导航到JTextField,然后开始键入时,我键入的字符会自动输入单元格。然而,当我以