双击

时间:2017-03-30 06:00:25

标签: java swing jtable double-click mouseclick-event

我正在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 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

table = new JTable(model);    

不要继续创建新组件。相反,您可以使用以下命令更新现有表的数据:

table.setModel( model );
  

。我想清除表中的数据来自私密扫描

或者不是创建一个全新的DefaultTableModel,而是可以使用现有的模型。

您可以使用以下方法清除数据:

model.setRowCount( 0 );

并使用以下方法添加数据行:

model.addRow(...);