setdragenabled java_将文件从操作系统拖放到Java应用程序(Swing)

首先我要说的是,我一直在阅读

drag’n drop tutorial和SO上提出的类似问题,但不幸的是,我对这件事情感到更加困惑.我想要实现的是相对简单的,所以我很惊讶它已经让我陷入了这么多麻烦.我正在编写一个小实用程序应用程序,它将一堆结果文件(自定义xml类型)合并到一个大的制表符分隔文本文件中.大多数功能已经编码,但我想为它制作一个不错的GUI.

我想要的是能够以漂亮和亲切的方式将文件拖放到组件(例如JTextArea)中(读取:不是完整路径,而是一个小图标和名称).我希望能够提供一个JFileChooser来浏览文件.然后我将按顺序解析文件以生成我想要的矩阵.

到目前为止我所学到的是框架已经存在,但是需要定制任何其他功能.我在Netbeans中创建了一个测试GUI,并尝试将一堆文件拖到JTextArea上,但它们显示为文件路径,并且不可否认它看起来非常难看.

我非常感谢有关如何以一种简洁的方式解决(或澄清)这个问题的任何提示和指导.请注意,我打算在多个不同的操作系统(Mac,Win和Linux)上使用该软件.

编辑:我到目前为止的代码基于Sun教程中的一个示例,如下所示

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 ConsolidatorDemo extends JPanel implements ActionListener {

private static final long serialVersionUID = -4487732343062917781L;

JFileChooser fc;

JButton clear;

JTextArea dropZone, console;

JSplitPane childSplitPane, parentSplitPane;

PrintStream ps;

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));

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.

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();

}

});

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值