2014-11-25 62 views
2

enter image description here我有設計,其中我已經使用的JFileChooser和JList中的幀。現在我想執行的阻力和下降的JFileChooser功能的JList contianing文件夾(如在我的屏幕短JList的,則爲文件夾名A,B,C)從JFileChooser所假設我打開一個文件夾,這個文件夾我選擇(example.txt文件)文件,然後我執行拖放到JList連續文件夾a。所以我想(example.txt)文件應該在文件夾中。如何從JFileChooser中執行拖放操作的jList containig夾

how to do this things.and i have one more problem. in my screenshot Jlist contian Three folder(a,b,c). 
so when i click on folder a but i m not able to get inside folder a. 

this is my code by using this i have create screenshot. 

在這段代碼中,我創建了JFileChooser和JList。我已將所有文件夾添加到JList中。 現在我想執行從JFileChooser拖放到JList包含文件夾。

這是我的代碼使用這個我創建截圖。 在這段代碼中,我創建了JFileChooser和JList。我已將所有文件夾添加到JList中。 現在我想執行從JFileChooser拖放到JList包含文件夾。

package com.dhananjaynet.swing; 

import java.awt.datatransfer.*; 
import java.awt.event.*; 
import java.awt.BorderLayout; 
import java.awt.Component; 
import java.awt.Dimension; 
import java.io.*; 
import javax.swing.*; 
import javax.swing.UIManager.LookAndFeelInfo; 
import javax.swing.border.TitledBorder; 
import javax.swing.filechooser.FileNameExtensionFilter; 
import javax.swing.filechooser.FileSystemView; 
import javax.swing.text.*; 

import com.dhananjay.swing.upload.ReadAllFolderName; 

import java.util.ArrayList; 
import java.util.List; 


public class ConsolidatorDemo extends JPanel implements ActionListener { 
    private static final long serialVersionUID = -4487732343062917781L; 
    JFileChooser fc; 
    JButton clear; 
    JTextArea console; 

    JList dropZone; 
    DefaultListModel listModel; 
    JSplitPane childSplitPane, parentSplitPane; 
    PrintStream ps; 
    ArrayList<String > directyName; 

    public ConsolidatorDemo() { 

    super(new BorderLayout()); 

    fc = new JFileChooser(); 

    fc.setMultiSelectionEnabled(true); 
    fc.setDragEnabled(true); 
    fc.setControlButtonsAreShown(false); 
    fc.setFileSelectionMode(JFileChooser.FILES_ONLY); 


    JPanel fcPanel = new JPanel(new BorderLayout()); 
    fcPanel.add(fc, BorderLayout.CENTER); 

    clear = new JButton("Clear All"); 

    clear.addActionListener(this); 

    JPanel buttonPanel = new JPanel(new BorderLayout()); 

    buttonPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 

    buttonPanel.add(clear, BorderLayout.LINE_END); 


    JPanel leftUpperPanel = new JPanel(new BorderLayout()); 

    leftUpperPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 

    leftUpperPanel.add(fcPanel, BorderLayout.CENTER); 

    leftUpperPanel.add(buttonPanel, BorderLayout.PAGE_END); 

    JScrollPane leftLowerPanel = new javax.swing.JScrollPane(); 

    leftLowerPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 

    listModel = new DefaultListModel(); 

    directyName=ReadAllFolderName.ReadDirectory(); 

    dropZone = new JList(listModel); 

    dropZone.setListData(directyName.toArray()); 

    dropZone.setCellRenderer(new FileCellRenderer()); 

    dropZone.setTransferHandler(new ListTransferHandler(dropZone)); 

    dropZone.setDragEnabled(true); 

    dropZone.setDropMode(javax.swing.DropMode.INSERT); 
    dropZone.setBorder(new TitledBorder("Selected files/folders")); 
    leftLowerPanel.setViewportView(new JScrollPane(dropZone)); 

    childSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, 
      leftUpperPanel, leftLowerPanel); 
    childSplitPane.setDividerLocation(400); 
    childSplitPane.setPreferredSize(new Dimension(480, 650)); 

    console = new JTextArea(); 
    console.setColumns(40); 
    console.setLineWrap(true); 
    console.setBorder(new TitledBorder("Console")); 

    parentSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, 
        childSplitPane, console); 
    parentSplitPane.setDividerLocation(480); 
    parentSplitPane.setPreferredSize(new Dimension(800, 650)); 

    add(parentSplitPane, BorderLayout.CENTER); 

} 

public void setDefaultButton() { 
    getRootPane().setDefaultButton(clear); 
} 

public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == clear) { 
     listModel.clear(); 
    } 
} 


/** 
* Create the GUI and show it. For thread safety, 
* this method should be invoked from the 
* event-dispatching thread.![this is my GUI][2] 
*/ 


private static void createAndShowGUI() { 

    //Make sure we have nice window decorations. 
    JFrame.setDefaultLookAndFeelDecorated(true); 
    try { 

     //UIManager.setLookAndFeel("de.javasoft.plaf.synthetica.SyntheticaBlackStarLookAndFeel"); 
     for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 

    //Create and set up the window. 
    JFrame frame = new JFrame("Consolidator!"); 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

    //Create and set up the menu bar and content pane. 
    ConsolidatorDemo demo = new ConsolidatorDemo(); 
    demo.setOpaque(true); //content panes must be opaque 
    frame.setContentPane(demo); 

    //Display the window. 
    frame.pack(); 
    frame.setVisible(true); 
    demo.setDefaultButton(); 
} 

public static void main(String[] args) { 

    //Schedule a job for the event-dispatching thread: 
    //creating and showing this application's GUI. 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 
} 

class FileCellRenderer extends DefaultListCellRenderer { 

    public Component getListCellRendererComponent(JList list, 
     Object value, 
     int index, 
     boolean isSelected, 
     boolean cellHasFocus) { 

     Component c = super.getListCellRendererComponent(
      list,value,index,isSelected,cellHasFocus); 

     if (c instanceof JLabel && value instanceof File) { 
      JLabel l = (JLabel)c; 
      File f = (File)value; 
      l.setIcon(FileSystemView.getFileSystemView().getSystemIcon(f)); 
      l.setText(f.getName()); 
      l.setToolTipText(f.getAbsolutePath()); 
     } 

     return c; 
    } 
} 

class ListTransferHandler extends TransferHandler { 

    private JList list; 

    ListTransferHandler(JList list) { 
     this.list = list; 
    } 

    @Override 
    public boolean canImport(TransferHandler.TransferSupport info) { 
     // we only import FileList 
     if (!info.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public boolean importData(TransferHandler.TransferSupport info) { 
     if (!info.isDrop()) { 
      return false; 
     } 

     // Check for FileList flavor 
     if (!info.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { 
      displayDropLocation("List doesn't accept a drop of this type."); 
      return false; 
     } 

     // Get the fileList that is being dropped. 
     Transferable t = info.getTransferable(); 
     List<File> data; 
     try { 
      data = (List<File>)t.getTransferData(DataFlavor.javaFileListFlavor); 
     } 
     catch (Exception e) { return false; } 
     DefaultListModel model = (DefaultListModel) list.getModel(); 
     for (Object file : data) { 
      model.addElement((File)file); 
     } 
     return true; 
    } 

    private void displayDropLocation(String string) { 
     System.out.println(string); 
    } 
} 

this my other class for Populating all the folder name into JList 


package com.dhananjay.swing.upload; 

import java.io.File; 
import java.util.ArrayList; 

public class ReadAllFolderName { 


    public static ArrayList<String> ReadDirectory() { 
     String path = "C:\\Users\\SonyBastian\\Desktop\\DMC"; 

     ArrayList<String> files = new ArrayList<String>(); 
     File folder = new File(path); 
     File[] listOfFiles = folder.listFiles(); 

     for (int i = 0; i < listOfFiles.length; i++) { 
      System.out.println("method 1"); 
      if (listOfFiles[i].isDirectory()) { 

       files.add(listOfFiles[i].getName()); 
       /*if (files.endsWith(".txt") || files.endsWith(".TXT")) { 
        System.out.println(files); 
       }*/ 
      } 
     } 
     return files; 
    } 
} 

![enter image description here][3] 


    [1]: http://i.stack.imgur.com/YAP60.png 

Thanks 

回答

1

您有JList模型問題,你DefaultListModel創建它,但你使用dropZone.setListData(directyName.toArray());其重建模式,因爲你在下一行DefaultListModel model = (DefaultListModel) list.getModel();得到Exception

所以,嘗試創建和填充JList像未來:

directyName=ReadAllFolderName.ReadDirectory(); 
listModel = new DefaultListModel(); 
for(String s : directyName){ 
    listModel.addElement(s); 
} 
dropZone = new JList(listModel); 
+0

TNX答覆先生。但是當我執行拖放從JFileChooser所降的jList到這是fine.but工作我想從存儲JFileChooser的選定文件的JList含folder.in我的情況下,有三個文件夾(A,B,C)含JList的。如果我從JFIleChooser中選擇一個文件,並執行拖放到JList中的文件夾中。所以文件必須進入該文件夾 – user3143376 2014-11-25 08:44:31