use*_*136 13 java search swing jtable
我在java中创建了一个JTable.除了搜索表格中的元素,我可以做任何事情.我想要一个输入对话框,所以这就是我现在所拥有的:
btnSearch = new JButton("Search");
btnSearch.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String name = JOptionPane.showInputDialog("Wat wil je zoeken?");
}
});
add(btnSearch);
Run Code Online (Sandbox Code Playgroud)
我想用for循环来做.但我不知道怎么做.有人可以帮我吗?
Pau*_*tha 43
您可能希望使用a RowFilter来过滤搜索结果.下面是使用a RowFilter和a 的示例DocumentListener.当用户键入时,行会动态过滤.
请参见RowFilter api和DocumentListener api.如果你不喜欢动态筛选,你可以只坚持使用按钮,也可以添加一个ActionListener到的JTextField,所以当Enter被按下时,过滤器会处理.您将在侦听器回调(actionPerformed)中放入的代码就是这样
String text = jtfFilter.getText();
if (text.trim().length() == 0) {
rowSorter.setRowFilter(null);
} else {
rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
}
Run Code Online (Sandbox Code Playgroud)

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
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.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class TestTableSortFilter extends JPanel {
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 DefaultTableModel model = new DefaultTableModel(data, columnNames);
private JTable jTable = new JTable(model);
private TableRowSorter<TableModel> rowSorter
= new TableRowSorter<>(jTable.getModel());
private JTextField jtfFilter = new JTextField();
private JButton jbtFilter = new JButton("Filter");
public TestTableSortFilter() {
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);
setLayout(new BorderLayout());
add(panel, BorderLayout.SOUTH);
add(new JScrollPane(jTable), BorderLayout.CENTER);
jtfFilter.getDocument().addDocumentListener(new DocumentListener(){
@Override
public void insertUpdate(DocumentEvent e) {
String text = jtfFilter.getText();
if (text.trim().length() == 0) {
rowSorter.setRowFilter(null);
} else {
rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
}
}
@Override
public void removeUpdate(DocumentEvent e) {
String text = jtfFilter.getText();
if (text.trim().length() == 0) {
rowSorter.setRowFilter(null);
} else {
rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
}
}
@Override
public void changedUpdate(DocumentEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
JFrame frame = new JFrame("Row Filter");
frame.add(new TestTableSortFilter());
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
JTable 的模型是保存数据的地方,通过搜索它,您应该能够检查它是否包含您想要的内容:
for(int i = 0; i < table.getRowCount(); i++){//For each row
for(int j = 0; j < table.getColumnCount(); j++){//For each column in that row
if(table.getModel().getValueAt(i, j).equals("STRING_TO_SEARCH")){//Search the model
System.out.println(table.getModel().getValueAt(i, j));//Print if found string
}
}//For loop inner
}//For loop outer
Run Code Online (Sandbox Code Playgroud)
祝你好运!
| 归档时间: |
|
| 查看次数: |
39360 次 |
| 最近记录: |