DnDTarget.java revision 8729:0242fce0f717
197403Sobrien/*
297403Sobrien * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
3169691Skan * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4132720Skan *
597403Sobrien * This code is free software; you can redistribute it and/or modify it
697403Sobrien * under the terms of the GNU General Public License version 2 only, as
797403Sobrien * published by the Free Software Foundation.
897403Sobrien *
997403Sobrien * This code is distributed in the hope that it will be useful, but WITHOUT
1097403Sobrien * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1197403Sobrien * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1297403Sobrien * version 2 for more details (a copy is included in the LICENSE file that
1397403Sobrien * accompanied this code).
1497403Sobrien *
1597403Sobrien * You should have received a copy of the GNU General Public License version
1697403Sobrien * 2 along with this work; if not, write to the Free Software Foundation,
1797403Sobrien * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1897403Sobrien *
19169691Skan * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2097403Sobrien * or visit www.oracle.com if you need additional information or have any
2197403Sobrien * questions.
2297403Sobrien */
2397403Sobrien
2497403Sobrien/*
2597403Sobrien* Panel is a DropTarget
2697403Sobrien*
2797403Sobrien*/
2897403Sobrien
2997403Sobrienimport java.awt.*;
3097403Sobrienimport java.awt.datatransfer.*;
3197403Sobrienimport java.awt.dnd.*;
3297403Sobrienimport java.io.*;
3397403Sobrien
3497403Sobrien
3597403Sobrienclass DnDTarget extends Panel implements DropTargetListener {
36169691Skan    private int dragOperation = DnDConstants.ACTION_COPY | DnDConstants.ACTION_MOVE;
3797403Sobrien    Color bgColor;
3897403Sobrien    Color htColor;
39132720Skan
40132720Skan    DnDTarget(Color bgColor, Color htColor) {
4197403Sobrien        super();
4297403Sobrien        this.bgColor = bgColor;
4397403Sobrien        this.htColor = htColor;
4497403Sobrien        setBackground(bgColor);
4597403Sobrien        setDropTarget(new DropTarget(this, this));
4697403Sobrien    }
47169691Skan
48169691Skan
49117397Skan    public void dragEnter(DropTargetDragEvent e) {
50117397Skan        System.out.println("[Target] dragEnter");
51117397Skan        setBackground(htColor);
52117397Skan        repaint();
53117397Skan    }
54117397Skan
55117397Skan    public void dragOver(DropTargetDragEvent e) {
56117397Skan        System.out.println("[Target] dragOver");
5797403Sobrien    }
5897403Sobrien
5997403Sobrien    public void dragExit(DropTargetEvent e) {
6097403Sobrien        System.out.println("[Target] dragExit");
6197403Sobrien        setBackground(bgColor);
6297403Sobrien        repaint();
6397403Sobrien    }
6497403Sobrien
6597403Sobrien    public void dragScroll(DropTargetDragEvent e) {
6697403Sobrien        System.out.println("[Target] dragScroll");
6797403Sobrien    }
6897403Sobrien
6997403Sobrien    public void dropActionChanged(DropTargetDragEvent e) {
7097403Sobrien        System.out.println("[Target] dropActionChanged");
7197403Sobrien    }
72132720Skan
73132720Skan    public void drop(DropTargetDropEvent dtde) {
7497403Sobrien        System.out.println("[Target] drop");
7597403Sobrien        boolean success = false;
76117397Skan        if ((dtde.getDropAction() & dragOperation) == 0) {
77117397Skan            dtde.rejectDrop();
78117397Skan            Label label = new Label("[no links here :) ]");
79117397Skan            label.setBackground(Color.cyan);
80117397Skan            add(label);
81117397Skan        } else {
82117397Skan            dtde.acceptDrop(dragOperation);
83117397Skan            DataFlavor[] dfs = dtde.getCurrentDataFlavors();
8497403Sobrien            if (dfs != null && dfs.length >= 1){
8597403Sobrien                Transferable transfer = dtde.getTransferable();
86117397Skan                try {
87117397Skan                    Button button = (Button)transfer.getTransferData(dfs[0]);
88117397Skan                    if( button != null ){
89117397Skan                        add(button);
90117397Skan                        success = true;
91117397Skan                    }
9297403Sobrien                } catch (IOException ioe) {
9397403Sobrien                    System.out.println(ioe.getMessage());
9497403Sobrien                    return;
95117397Skan                } catch (UnsupportedFlavorException ufe) {
96117397Skan                    System.out.println(ufe.getMessage());
97117397Skan                    return;
98117397Skan                }  catch (Exception e) {
99117397Skan                    System.out.println(e.getMessage());
100117397Skan                    return;
101117397Skan                }
102117397Skan            }
10397403Sobrien        }
104132720Skan        setBackground(bgColor);
105132720Skan        dtde.dropComplete(success);
10697403Sobrien
107117397Skan        invalidate();
108117397Skan        validate();
109117397Skan        repaint();
110117397Skan    }
111117397Skan}
11297403Sobrien