Swing JTable定制过滤/搜索
问题描述:
我想为所有列添加过滤/搜索功能(以便它是通用的),逻辑不是问题。不过,我在想,在可视化方面做到这一点的最佳方式是在每个列标题(或列标题的一部分)上方都有一个文本字段?Swing JTable定制过滤/搜索
- 列标题要求中嵌入实施新的渲染+有,不知怎的,我需要捕捉,因为电池的情况下问题:
当试图做到这一点我碰到的几个问题被绘制并且不响应事件。看起来对我来说是一种矫枉过正。
- 在每列上方有一个单独的文本字段组件行(面板)乍一看听起来容易得多,但是,将文本字段与列对齐是有问题的,因为我在
JTable
或TableColumn
中找不到API,列的坐标。此外,移动列将意味着调整文本字段(这是可能的,但另一个开销)。
我是否错过了一些东西,或者确实很难实现那样简单的事情?还有其他建议吗?
答
of visualization is having a textfield above each column header
(or part of the column header)...
你看看RowFilter,简单example here
使用AutoComplete JComboBox & JTextField为seaching
答
见下文的样品过滤依靠过滤您的JTable数据 文本字段项依靠文本框中输入:
import java.awt.BorderLayout;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
公共类TestTableSorterFilter扩展JApplet的{
private String[] columnNames
= {"Country", "Capital", "Population in Millions", "Democracy"};
private Object[][] data = {
{"USA", "Washington DC", 280, true},
{"Canada", "Ottawa", 32, true},
{"United Kingdom", "London", 60, true},
{"Germany", "Berlin", 83, true},
{"France", "Paris", 60, true},
{"Norway", "Oslo", 4.5, true},
{"India", "New Delhi", 1046, true}
};
private JTable jTable = new JTable(data, columnNames);
private TableRowSorter<TableModel> rowSorter
= new TableRowSorter<>(jTable.getModel());
private JTextField jtfFilter = new JTextField();
private JButton jbtFilter = new JButton("Filter");
public TestTableSorterFilter() {
jTable.setRowSorter(rowSorter);
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JLabel("Specify a word to match:"),
BorderLayout.WEST);
panel.add(jtfFilter, BorderLayout.CENTER);
add(panel, BorderLayout.SOUTH);
add(new JScrollPane(jTable), BorderLayout.CENTER);
jtfFilter.getDocument().addDocumentListener(new DocumentListener(){
@Override
public void changedUpdate(DocumentEvent arg0) {}
@Override
public void insertUpdate(DocumentEvent arg0) {
String text = jtfFilter.getText();
if (text.trim().length() == 0) {
rowSorter.setRowFilter(null);
} else {
rowSorter.setRowFilter(RowFilter.regexFilter(text));
}
}
@Override
public void removeUpdate(DocumentEvent arg0) {
String text = jtfFilter.getText();
if (text.trim().length() == 0) {
rowSorter.setRowFilter(null);
} else {
rowSorter.setRowFilter(RowFilter.regexFilter(text));
}
}
});
}
}
新地址:http://github.com/eugener/oxbow – 2014-03-19 20:02:02
这里还有一个不错的图书馆:http://coderazzi.net/tablefilter/ – 2014-03-19 20:56:41