龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java实现鼠标拖放功能的方法(2)

时间:2014-07-30 03:14来源:网络整理 作者:网络 点击:
分享到:
1.新建一个Project,取名为JDragAndDropDemo。 2.新建一个Application,取名为JDragAndDropDemo;主窗口取名为MainFrame,标题为JDragAndDropDemo。 3.新建一个Class,取名

1.新建一个Project,取名为JDragAndDropDemo。
2.新建一个Application,取名为JDragAndDropDemo;主窗口取名为MainFrame,标题为JDragAndDropDemo。
3.新建一个Class,取名为DragJLabel,继承JLabel 类。
4.利用wizards|implements interface 使DragJLabel 类实现DragGestureListener 、DragSourceListener 接口。
5.在类DragJLabel 中添加新的属性 DragSource ds,代码如下:

class DragJLabel extends JLabel implements DragGestureListener, DragSourceListener {
DragSource ds = DragSource.getDefaultDragSource(); //创建DragSource 实例
……
}

6.编写DragJLabel 类的构造方法。

public DragJLabel(String title,int alignment){
super(title,alignment); //使用父类的方法
int action = DnDConstants.ACTION_COPY_OR_MOVE;
ds.createDefaultDragGestureRecognizer(this,action,this); //创建
}

7.实现DragJLabel 类中的dragGestureRecognized()方法,包装并发送数据。

public void dragGestureRecognized(DragGestureEvent dge) {
//throw new java.lang.UnsupportedOperationException("Method dragGestureRecognized() not yet implemented.");
try{
Transferable tr = new StringSelection(this.getText());
dge.startDrag(DragSource.DefaultCopyNoDrop,tr,this);
}catch(Exception err){
err.printStackTrace();
}
}

8.实现DragJLabel 类中的dragEnter()方法,设置光标的形状。

public void dragEnter(DragSourceDragEvent dsde) {
//throw new java.lang.UnsupportedOperationException("Method dragEnter() not yet implemented.");
DragSourceContext dsc = dsde.getDragSourceContext();
int action = dsde.getDropAction();
if ((action&DnDConstants.ACTION_COPY)!=0)
dsc.setCursor(DragSource.DefaultCopyDrop);
else
dsc.setCursor(DragSource.DefaultCopyNoDrop);
}

9.在MainFrame 类的设计窗口中下部添加一个JTextField 组件,并在类中创建一个DragJLabel实例,具体代码如下:

public class MainFrame extends JFrame implements DropTargetListener {
private JPanel contentPane;
private BorderLayout borderLayout1 = new BorderLayout();
private JTextField jTextField1 = new JTextField();
DragJLabel label = new DragJLabel("Hello World !",SwingConstants.CENTER);
……
}

10.编写MainFrame 类的初始化方法jbInit(),设置组件的初始属性,并创建一个新的DropTarget实例,代码如下:

private void jbInit() throws Exception {
//setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(410, 114));
this.setTitle("JDragAndDropDemo");
jTextField1.setFont(new java.awt.Font("Dialog", 0, 14));
contentPane.add(jTextField1, BorderLayout.SOUTH);
contentPane.add(this.label,BorderLayout.NORTH);
new DropTarget(this.jTextField1,DnDConstants.ACTION_COPY_OR_MOVE,this);
}

11.利用wizards|implements interface 使MainFrame 类实现DropTargetListener 接口。

12.实现继承自DropTargetListener 接口的方法drop(),处理传递来的数据,具体代码如下:

public void drop(DropTargetDropEvent dtde) {
//throw new java.lang.UnsupportedOperationException("Method drop() not yet implemented.");
try{
Transferable tr = dtde.getTransferable();
if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor)){
dtde.acceptDrop(dtde.getDropAction());
String s = (String) tr.getTransferData(DataFlavor.stringFlavor);
this.jTextField1.setText(this.jTextField1.getText()+s);
dtde.dropComplete(true);
}else{
dtde.rejectDrop();
}
}catch(Exception err){
err.printStackTrace();
}
}
收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接