Moh*_*een 3 java swing filtering jlist
我有一个文本字段粘贴到jList1,我需要过滤j列表实体依赖于用户在文本框中输入的值,如下所示,如果j列表值,{"one","two","three"......etc }
如果用户在文本框中输入"三",弹出列表并选择具有三个值的行到选定的相关索引.
private void jTbandnoActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
String tXT=jTbandno.getText();
jList2.collections.equal(tXt);
int index = jList2.getSelectedIndex();
JOptionPane.showMessageDialog(null, index);
}
Run Code Online (Sandbox Code Playgroud)
Pau*_*tha 13
那么你可以创建方法来过滤掉使用的值
通常,在处理使用模型的数据或组件时,我们应该与模型而不是组件进行交互.所以你可以有类似的方法
private String[] defaultValues = {
"a", "ab", "abc", "abcd", "abcde", "abcdef", "absdefg", "abcdefgh",
"abcdefghi", "abcdefghij", "abcdefghijk", "abcdefghijkl", "abcdefghijklm",
};
public void filterModel(DefaultListModel<String> model, String filter) {
for (String s : defaultValues) {
if (!s.startsWith(filter)) {
if (model.contains(s)) {
model.removeElement(s);
}
} else {
if (!model.contains(s)) {
model.addElement(s);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当您需要过滤时,例如在DocumentListener文本字段中,只需获取文本字段的文本,然后调用此方法,传入模型和过滤字符串.就像是
private void filter() {
String filter = field.getText();
filterModel((DefaultListModel<String>)jList.getModel(), filter);
}
Run Code Online (Sandbox Code Playgroud)
这是一个完整的例子.您可能希望实现一些更复杂的过滤,例如包括排序到搜索过滤器.这只是一个简单的案例.

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListModel;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class DynamicListDemo {
private String[] defaultValues = {
"a", "ab", "abc", "abcd", "abcde", "abcdef", "absdefg", "abcdefgh",
"abcdefghi", "abcdefghij", "abcdefghijk", "abcdefghijkl", "abcdefghijklm",
};
private JList jList = createJList();
public DynamicListDemo() {
JFrame frame = new JFrame();
frame.add(new JScrollPane(jList));
frame.add(createTextField(), BorderLayout.PAGE_END);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private JTextField createTextField() {
final JTextField field = new JTextField(15);
field.getDocument().addDocumentListener(new DocumentListener(){
@Override public void insertUpdate(DocumentEvent e) { filter(); }
@Override public void removeUpdate(DocumentEvent e) { filter(); }
@Override public void changedUpdate(DocumentEvent e) {}
private void filter() {
String filter = field.getText();
filterModel((DefaultListModel<String>)jList.getModel(), filter);
}
});
return field;
}
private JList createJList() {
JList list = new JList(createDefaultListModel());
list.setVisibleRowCount(6);
return list;
}
private ListModel<String> createDefaultListModel() {
DefaultListModel<String> model = new DefaultListModel<>();
for (String s : defaultValues) {
model.addElement(s);
}
return model;
}
public void filterModel(DefaultListModel<String> model, String filter) {
for (String s : defaultValues) {
if (!s.startsWith(filter)) {
if (model.contains(s)) {
model.removeElement(s);
}
} else {
if (!model.contains(s)) {
model.addElement(s);
}
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
new DynamicListDemo();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
更新:正如mKorbel明确指出的那样,对于JTable具有单个列的情况,这可能是更好的用例,其中排序和过滤已经是API的一部分.
请参见如何使用表:排序和筛选
| 归档时间: |
|
| 查看次数: |
10716 次 |
| 最近记录: |