comment faites glisser et déposez les fichiers d'un répertoire en java
Je veux mettre en œuvre glisser-déposer des fichiers à partir d'un annuaire comme quelqu'un disque dur, mais ne peuvent pas comprendre comment le faire. J'ai lu l'api java, mais il parle de sélecteurs de couleurs et de glisser-déposer entre les listes, mais comment faites glisser les fichiers de l'ordinateur du système de fichiers et déposez-les dans mon application. J'ai essayé d'écrire le transferhandler classe et un événement de souris pour quand le drag démarre mais rien ne semble fonctionner. Maintenant, je suis de retour juste d'avoir mon JFileChooser ensemble afin de traînée a été activée, mais comment?
Toute info ou pointer dans la bonne direction grandement apprécié.
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
public class FileChooserDemo
extends JPanel
implements ActionListener
{
JLabel selectedFileLabel;
JList selectedFilesList;
JLabel returnCodeLabel;
public FileChooserDemo()
{
super();
createContent();
}
void initFrameContent()
{
JPanel closePanel = new JPanel();
add(closePanel, BorderLayout.SOUTH);
}
private void createContent()
{
setLayout(new BorderLayout());
JPanel NorthPanel = new JPanel();
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("File");
JMenuItem quit = new JMenuItem("Quit");
menuBar.add(menu);
menu.add(quit);
NorthPanel.add(menu,BorderLayout.NORTH);
JPanel buttonPanel = new JPanel(new GridLayout(7,1 ));
JButton openButton = new JButton("Open...");
openButton.setActionCommand("OPEN");
openButton.addActionListener(this);
buttonPanel.add(openButton);
JButton saveButton = new JButton("Save...");
saveButton.setActionCommand("SAVE");
saveButton.addActionListener(this);
buttonPanel.add(saveButton);
JButton delete = new JButton("Delete");
delete.addActionListener(this);
delete.setActionCommand("DELETE");
buttonPanel.add(delete);
add(buttonPanel, BorderLayout.WEST);
//create a panel to display the selected file(s) and the return code
JPanel displayPanel = new JPanel(new BorderLayout());
selectedFileLabel = new JLabel("-");
selectedFileLabel.setBorder(BorderFactory.createTitledBorder
("Selected File/Directory "));
displayPanel.add(selectedFileLabel, BorderLayout.NORTH);
selectedFilesList = new JList();
JScrollPane sp = new JScrollPane(selectedFilesList);
sp.setBorder(BorderFactory.createTitledBorder("Selected Files "));
MouseListener listener = new MouseAdapter()
{
public void mousePressed(MouseEvent me)
{
JComponent comp = (JComponent) me.getSource();
TransferHandler handler = comp.getTransferHandler();
handler.exportAsDrag(comp, me, TransferHandler.MOVE);
}
};
selectedFilesList.addMouseListener(listener);
displayPanel.add(sp);
returnCodeLabel = new JLabel("");
returnCodeLabel.setBorder(BorderFactory.createTitledBorder("Return Code"));
displayPanel.add(returnCodeLabel, BorderLayout.SOUTH);
add(displayPanel);
}
public void actionPerformed(ActionEvent e)
{
int option = 0;
File selectedFile = null;
File[] selectedFiles = new File[0];
if (e.getActionCommand().equals("CLOSE"))
{
System.exit(0);
}
else if (e.getActionCommand().equals("OPEN"))
{
JFileChooser chooser = new JFileChooser();
chooser.setDragEnabled(true);
chooser.setMultiSelectionEnabled(true);
option = chooser.showOpenDialog(this);
selectedFiles = chooser.getSelectedFiles();
}
else if (e.getActionCommand().equals("SAVE"))
{
JFileChooser chooser = new JFileChooser();
option = chooser.showSaveDialog(this);
selectedFiles = chooser.getSelectedFiles();
}
//display the selection and return code
if (selectedFile != null)
selectedFileLabel.setText(selectedFile.toString());
else
selectedFileLabel.setText("null");
DefaultListModel listModel = new DefaultListModel();
for (int i =0; i < selectedFiles.length; i++)
listModel.addElement(selectedFiles[i]);
selectedFilesList.setModel(listModel);
returnCodeLabel.setText(Integer.toString(option));
}
public static void main(String[] args)
{
SwingUtilities.invokeLater
(new Runnable()
{
public void run()
{
FileChooserDemo app = new FileChooserDemo();
app.initFrameContent();
JFrame frame = new JFrame("LoquetUP");
frame.getContentPane().add(app);
frame.setDefaultCloseOperation(3);
frame.setSize(600,400);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
//frame.pack();
frame.setVisible(true);
}
});
}
}
import
rien de la java.awt.dnd
paquet?parce que j'ai enlevé mon transferHandler et mouselistener code
Jetez un oeil à cet autre débordement de pile question][1]. Je pense qu'il a peu de ce que vous cherchez. [1]: stackoverflow.com/questions/811248/...
est-il quelque chose en java 1.7 que fait ce code différent?
OriginalL'auteur rogerthat | 2012-11-28
Vous devez vous connecter pour publier un commentaire.
C'est mon point de vue sur l'idée. J'ai utilisé le "traditionnel" glisser-déposer de l'API dans cet exemple. Il a des extra "peinture" tweaks juste pour montrer ce que vous pourriez être en mesure de le faire.
Cet exemple ne pas scanner les dossiers déposés sur elle, de sorte que le dossier de ne s'inscrire qu'un seul fichier, mais je suis sûr que vous pouvez travailler sur
Merci. Immobilier nice.
c'est un peu précipité, mais l'idée de base est bonne
envie de mélanger cela avec
JXLayer
mais je n'ai pas eu le temps 🙁Désolé, je n'ai pas l'habitude d'inclure comme il faut de l'espace qui pourrait être utilisé pour l'exemple. Ce que l'éditeur que vous utilisez?
ctrl+shift+I
de corriger les importations dans NetbeansOriginalL'auteur MadProgrammer
Vous avez besoin d'expérimenter avec des Drag & Drop et de voir exactement ce que les saveurs sont disponibles lorsque vous essayez de faire glisser des fichiers. Si vous le faites dans votre personnalisé TransferHandler vous serez agréablement surpris de la Saveur est la
DataFlavor.javaFileListFlavor
, ce qui indique que l'élément peut être utilisé simplement comme unList
. Essayez-le et vous verrez que ça marche!!!Note sur l'examen de votre affiché le code, je ne vois pas de code de votre tentative à l'aide d'un TransferHandler, de sorte qu'il est difficile de dire ce que vous pourriez faire du mal ici.
Edit 1
Vous semblez être en train d'essayer d'utiliser un MouseListener pour votre glisser-déposer, et je ne suis pas familier avec ce type d'utilisation. Pouvez-vous montrer une référence à un tutoriel qui vous dit de le faire?
Edit 2
(En fait, à moins que ce changement dans Java 7, j'ai toujours
java.util.List
qui contientFile
objets - je n'ai pas en mesure de commencer à obtenir des médicaments génériques à travailler pour cela ;))cool. ne le savais pas. modifier
avez-vous traversé tout de ce tutoriel? Vous n'avez pas besoin ou utiliser un MouseListener pour ce type de comportement, et vous avez certainement ne pouvez pas deviner comment le faire. Veuillez voir le mon Edit 2 pour des exemples de code.
en fait c'est encore plus simple. Code mis à jour.
OriginalL'auteur Hovercraft Full Of Eels