我有一個來自數據庫的數據填充了JTable。當數據輸入到JTextField中時,我添加了一個搜索函數來突出顯示單元格。但是在一分鐘內,您必須鍵入確切的單詞或數字,我想要做的就是隻能搜索幾個字母或數字,而JTable將顯示包含這些字母或數字的結果。在JTable中搜索通過JTextField數據輸入的數據
我曾嘗試使用:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String text = jTextField1.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
sorter.setRowFilter(RowFilter.regexFilter(text));
}
}
});
但它確實影響到JTable中。
所以我用這段代碼:
private class HighlightRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
// everything as usual
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// added behavior
if(row == table.getSelectedRow()) {
// this will customize that kind of border that will be use to highlight a row
setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
}
return this;
}
}
private void searchResultsActionPerformed(ActionEvent evt) {
String value = jTextField1.getText();
for (int row = 0; row <= table.getRowCount() - 1; row++) {
for (int col = 0; col <= table.getColumnCount() - 1; col++) {
if (value.equals(table.getValueAt(row, col))) {
// this will automatically set the view of the scroll in the location of the value
table.scrollRectToVisible(table.getCellRect(row, 0, true));
// this will automatically set the focus of the searched/selected row/value
table.setRowSelectionInterval(row, row);
for (int i = 0; i <= table.getColumnCount() - 1; i++) {
table.getColumnModel().getColumn(i).setCellRenderer(new HighlightRenderer());
}
}
}
}
}
使用類型爲JTextField中的數據,作品,但像我前面提到的,你必須鍵入確切的名稱或編號。這不是我希望它工作的方式。
任何幫助表示讚賞。
阿爾特本地解決方案,您可以嘗試[SwingX的搜索演示](http://swingx.java.net/)。 – AsirC