我正在制作一个java应用程序,用户可以在其中搜索JTable中的数据。我使用了过滤器让用户从JTable中搜索内容。我还打算将过滤后的数据导出到一个文本文件中。但当我这样做时,它会导出整个表数据,而不仅仅是搜索到的数据。这就是我尝试过的:
DefaultTableModel Model = (DefaultTableModel)table.getModel();
TableRowSorter<DefaultTableModel> tr = new TableRowSorter<DefaultTableModel>(Model);
table.setRowSorter(tr);
if(srchop.getSelectedItem().toString() == "Name Of Publication") {
tr.setRowFilter(RowFilter.regexFilter(nameOfPub.getText().trim().toLowerCase()));
}else if() {
//code for search through other jtextfields
}else{}
table.setAutoCreateRowSorter(true);
table.setRowSorter(tr);
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Export the data to");
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("XML Documents","xml"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Text Files","txt"));
fileChooser.setAcceptAllFileFilterUsed(true);
int userSelection = fileChooser.showSaveDialog(this);
if(userSelection == JFileChooser.APPROVE_OPTION){
File fileToSave = fileChooser.getSelectedFile();
String ftsEx = fileToSave.getPath();
int index = ftsEx.lastIndexOf('.');
String ext = ftsEx.substring(index + 1);
try {
if(ext.equals("txt")) {
FileWriter fw = new FileWriter(fileToSave);
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 0; i < model.getRowCount(); i++) {
for (int j = 0; j < model.getColumnCount(); j++) {
bw.write(model.getValueAt(i, j).toString()+" ");
}
bw.newLine();
}
JOptionPane.showMessageDialog(this, "EXPORT SUCCESSFUL","INFORMATION",JOptionPane.INFORMATION_MESSAGE);
bw.close();
fw.close();
}else if(ext.equals("xml")) {
////XML export code
}
有没有什么方法可以把过滤后的数据存储到其他jtable中,然后用它打印到文件中。或者可以通过其他方式实现?
我的问题的答案是使用"table"而不是"model"。模型存储所有JTable数据,但表只存储当前显示在JTable中的数据。