【问题标题】:How to drag file or folder from windows explorer to java?如何将文件或文件夹从 Windows 资源管理器拖到 java?
【发布时间】:2012-11-03 21:33:51
【问题描述】:

如何将文件或文件夹从 Windows 资源管理器拖到 Jpanel 或文本失败...
以及如何调用和使用桌面?

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

public class test extends JPanel implements ActionListener {
private static final long serialVersionUID = -4487732343062917781L;
JFileChooser fc;
JButton clear;
JTextArea dropZone, console;
JSplitPane childSplitPane, parentSplitPane;
PrintStream ps;

  public test() {
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));
dropZone = new JTextArea();
dropZone.setColumns(20);
dropZone.setLineWrap(true);
dropZone.setRows(5);
dropZone.setDragEnabled(true);
dropZone.setDropMode(javax.swing.DropMode.INSERT);
dropZone.setBorder(new TitledBorder("Selected files/folders"));
leftLowerPanel.setViewportView(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) {
    dropZone.setText("");

}
}

/**
 * Create the GUI and show it. For thread safety,
 * this method should be invoked from the
 * event-dispatching thread.
 */
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.
test demo = new test();
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();
        }
    });
}}    

我需要让这段代码接受来自 Windows 的文件和文件夹,而不仅仅是来自文件选择器

【问题讨论】:

  • 我不明白这个问题......一旦文件/文件夹被拖到您的程序中,您想做什么?
  • 你的意思是?我怎样才能做到这一点,以便我可以将文件从 Windows 资源管理器拖到我的 java 程序中,然后打开它?
  • 我想把文件和文件夹从win explorer拖到jpanel
  • @MadProgrammer - 不错的链接。非常有趣的阅读。

标签: java user-interface drag-and-drop jpanel jcomponent


【解决方案1】:

我想你可以试试这个页面,here,然后打开 FileInputStream 并将文件输出到 JPanel。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2013-03-20
    相关资源
    最近更新 更多