/* * $Id$ * * Copyright 2007 by Carsten Hammer. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ package com.lowagie.toolbox.swing; import java.awt.BorderLayout; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.io.IOException; import java.util.Vector; import javax.swing.*; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.*; import com.lowagie.text.pdf.PdfReader; /** * @since 2.1.1 (imported from itexttoolbox project) */ public class FileList extends JInternalFrame implements DropTargetListener { private static final long serialVersionUID = -7238230038043975672L; Vector<RowContainer> filevector = new Vector<RowContainer>(); public FileList() { super("FileList", true, true, true); try { jbInit(); } catch (Exception ex) { ex.printStackTrace(); } } private void jbInit() throws Exception { this.getContentPane().setLayout(borderLayout1); jTable1.addKeyListener(new FileList_jTable1_keyAdapter(this)); jLabel1.setText("pages"); jLabel2.setText("-"); model.addTableModelListener(new FileList_ftm_tableModelAdapter(this)); this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); jPanel1.setLayout(borderLayout2); jPanel2.setLayout(borderLayout3); jPanel1.add(jPanel2, java.awt.BorderLayout.CENTER); jPanel2.add(jScrollPane1, java.awt.BorderLayout.CENTER); jPanel1.add(jPanel3, java.awt.BorderLayout.NORTH); jPanel3.add(jLabel2); jPanel3.add(jLabel1); jScrollPane1.setViewportView(jTable1); jTable1.setRowSorter(sorter); // this.setSize(200,100); this.pack(); } JPanel jPanel1 = new JPanel(); BorderLayout borderLayout1 = new BorderLayout(); JPanel jPanel2 = new JPanel(); BorderLayout borderLayout2 = new BorderLayout(); JScrollPane jScrollPane1 = new JScrollPane(); FileTableModel model = new FileTableModel(); JTable jTable1 = new JTable(model); RowSorter<TableModel> sorter=new TableRowSorter<TableModel> (model); BorderLayout borderLayout3 = new BorderLayout(); DropTarget dt = new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, this, true, null); JPanel jPanel3 = new JPanel(); JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel(); public void dragEnter(DropTargetDragEvent dtde) { } public void dragOver(DropTargetDragEvent dtde) { } public void dropActionChanged(DropTargetDragEvent dtde) { System.out.println("actionchanged"); } public void drop(DropTargetDropEvent dtde) { if ( (dtde.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) == 0) { dtde.rejectDrop(); return; } dtde.acceptDrop(DnDConstants.ACTION_COPY); Vector<RowContainer> oldvec=this.filevector; Transferable transferable = dtde.getTransferable(); try { java.util.List<File> filelist = (java.util.List<File>) transferable.getTransferData( DataFlavor.javaFileListFlavor); for (File f: filelist) { filevector.add(new RowContainer(f)); model.fireTableDataChanged(); System.out.println(f.toString()); } } catch (IOException ex) { ex.printStackTrace(); } catch (UnsupportedFlavorException ex) { ex.printStackTrace(); } dtde.dropComplete(true); File[] filar=new File[filevector.size()]; for(int i=0;i<filevector.size();i++){ filar[i]=filevector.get(i).getFile(); } super.firePropertyChange("filevector", null, filar); } public void dragExit(DropTargetEvent dte) { } class FileTableModel extends AbstractTableModel { private static final long serialVersionUID = -8173736343997473512L; private String[] columnNames = { "Filename", "Pages", "Directory"}; public int getColumnCount() { return columnNames.length; } public int getRowCount() { return filevector.size(); } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int row, int col) { switch (col) { case 0: return filevector.get(row).getFile().getName(); case 1: return Integer.valueOf(filevector.get(row).getPages()); case 2: return filevector.get(row).getFile().getParent(); } return null; } public Class<?> getColumnClass(int col) { switch (col) { case 0: return String.class; case 1: return Integer.class; case 2: return String.class; } return null; } public void removeRow(int row) { filevector.remove(row); } } public void jTable1_keyPressed(KeyEvent e) { if (e.getKeyCode() == 127) { int[] selected = jTable1.getSelectedRows(); for (int i = selected.length - 1; i >= 0; i--) { model.removeRow(selected[i]); model.fireTableDataChanged(); } } } public void ftm_tableChanged(TableModelEvent e) { int sum = 0; for (RowContainer c: filevector) { sum += c.getPages(); } this.jLabel2.setText(Integer.toString(sum)); } public Vector<RowContainer> getFilevector() { return filevector; } public String getStringreprasentation(){ StringBuffer sb=new StringBuffer(); Vector<RowContainer> vec=getFilevector(); for(RowContainer c: vec){ sb.append(c.getFile().getAbsolutePath()).append('\n'); } return sb.toString(); } } class FileList_ftm_tableModelAdapter implements TableModelListener { private FileList adaptee; FileList_ftm_tableModelAdapter(FileList adaptee) { this.adaptee = adaptee; } public void tableChanged(TableModelEvent e) { adaptee.ftm_tableChanged(e); } } class FileList_jTable1_keyAdapter extends KeyAdapter { private FileList adaptee; FileList_jTable1_keyAdapter(FileList adaptee) { this.adaptee = adaptee; } public void keyPressed(KeyEvent e) { adaptee.jTable1_keyPressed(e); } } class RowContainer { private File file; private int pages; public File getFile() { return file; } public int getPages() { return pages; } public void setFile(File file) { this.file = file; } public void setPages(int pages) { this.pages = pages; } /** * RowContainer */ RowContainer(File file) { this.file = file; PdfReader reader = null; try { reader = new PdfReader(file. getAbsolutePath()); } catch (IOException ex) { } this.pages = reader.getNumberOfPages(); } }