我正在Swing中开发一个应用程序,我在其中扫描一些文件中的数据并在UI上的JTable中显示它,当我双击行时,相应的文件被打开。 “扫描”按钮代码如下,
JButton btnStart = new JButton("Scan");
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
File dir = new File(chooser.getSelectedFile(), chooser.getSelectedFile().getAbsolutePath());
System.out.println("dir " + dir);
File[] firstLevelFiles = chooser.getSelectedFile().listFiles();
if (firstLevelFiles != null && firstLevelFiles.length > 0) {
for (File aFile : firstLevelFiles) {
if (aFile.isDirectory()) {
listDirectory(aFile.getAbsolutePath(), level + 1);
} else {
fileExt=aFile.getName().substring(aFile.getName().lastIndexOf(".")+1);
for (String string : selectedExt) {
if(string.equals(fileExt)){
fileList.add(aFile);
}
}
}
}
}
MyFileReader myFileReader=new MyFileReader();
new Thread(new Runnable(){
@Override
public void run(){
fileMap=myFileReader.fileReader(fileList, filepath);
if(!fileMap.isEmpty()){
SwingUtilities.invokeLater(new Runnable(){
@Override public void run(){
int tableSize=myFileReader.getTableSize();
tableData=new String[tableSize][4];
Iterator it = fileMap.entrySet().iterator();
int j=0;
int k=0;
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
List<String> ls = (List<String>) pair.getValue();
for (int i = 1; i <= ls.size(); i++) {
if(k==1){
k++;
i--;
continue;
}
tableData[j][1]=pair.getKey().toString();
tableData[j][k]=ls.get(i-1).toString();
k++;
if(k==4){
k=0;
j++;
}
}
}
model = new DefaultTableModel(tableData, columns)
{
public boolean isCellEditable(int row, int column)
{
return false;//This causes all cells to be not editable
}
};
table = new JTable(model);
table.setEnabled(true);
JTableHeader header = table.getTableHeader();
header.setBackground(Color.LIGHT_GRAY);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setCellSelectionEnabled(true);
table.getColumnModel().getColumn(0).setPreferredWidth(5);
table.getColumnModel().getColumn(1).setPreferredWidth(400);
table.getColumnModel().getColumn(2).setPreferredWidth(5);
table.getColumnModel().getColumn(3).setPreferredWidth(5);
pane = new JScrollPane(table);
pane.setBounds(70,250,1000,300);
pane.setVisible(true);
contentPane.add(pane,BorderLayout.CENTER);
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int columnChk=table.getSelectedColumn();
if (columnChk == 1) {
String fpath = getSelectedData(table);
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec("explorer " + fpath);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
scanProg.setText("Scanning Completed");
}
});
}else {
scanProg.setText("No codebase found");
}
}
}).start();
}
}
});
btnStart.setBounds(324, 154, 89, 23);
contentPane.add(btnStart);
现在,当我重新扫描没有关闭框架的文件时,新数据会被JTable填充,但是一旦我双击任何一行,它的数据就会被之前的数据替换掉。我想从表中清除数据来自私密扫描。已经尝试过JTable.removeall(),但它没有帮助。 Screenshot of table is here 有什么想法吗?
答案 0 :(得分:1)
table = new JTable(model);
不要继续创建新组件。相反,您可以使用以下命令更新现有表的数据:
table.setModel( model );
。我想清除表中的数据来自私密扫描
或者不是创建一个全新的DefaultTableModel,而是可以使用现有的模型。
您可以使用以下方法清除数据:
model.setRowCount( 0 );
并使用以下方法添加数据行:
model.addRow(...);