Re: Drag and drop for non-String objects
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hendrik Maryns schreef:
| Nigel Wade schreef:
| | Hendrik Maryns wrote:
| |
| |> -----BEGIN PGP SIGNED MESSAGE-----
| |> Hash: SHA1
| |>
| |> Hi all,
| |>
| |> I???d like to revive a thread I started a while ago but which got no
| |> satisfying answers.
| |>
| |> I want to implement drag and drop for non-String objects.
| |>
| |> Setting: a JList with a DefaultListModel. It contains Formula???s (a
| |> class of my own making, with a whole hierarchy underneath it:
| |> Conjunction, Negation etc.). I then do
| |>
| |> result.setDragEnabled(true);
| |> result.setTransferHandler(new FormulaTransferHandler());
| |> result.setDropMode(DropMode.INSERT);
| |>
| |> on the JList. Here follows an almost minimal SSCCE, note that it needs
| |> Java 6:
| |>
| |
| | Here you specify that the DataFlavor which drop will accept is of class
| | Formula...
| |
| |
| |> ~ this.localFormulaFlavor = new ActivationDataFlavor(Formula.class,
| |> ~ DataFlavor.javaJVMLocalObjectMimeType, "Arrays of formulas");
| |> ~ }
| |
| |> ~ /**
| |> ~ * The data flavor for formulas local to the JVM.
| |> ~ */
| |> ~ private final DataFlavor localFormulaFlavor;
| |>
| |> ~ /**
| |> ~ * The formulas being transfered.
| |> ~ */
| |> ~ private Object[] transferedFormulas = null;
| |>
| |> ~ @Override
| |> ~ protected Transferable createTransferable(final JComponent c) {
| |> ~ final JList formulaList = (JList) c;
| |> ~ this.transferedFormulas = formulaList.getSelectedValues();
| |> ~ return new DataHandler(this.transferedFormulas,
| this.localFormulaFlavor
| |> ~ .getMimeType());
| |> ~ // TODO: add support via serialization?
| |> ~ }
| |
| | ..but what you actually transfer is an Object[]
|
| I see. What solution would you suggest: convert the Object[] to
| Formula[] and update above also, or simply use Object as the local
| flavor above and let the JList find out? I guess there is no need for
| Formula indeed, since I do not invoke any methods on it, so I could as
| well use Object[].
Ok, the latter option now makes the drop being accepted, but nothing
changes, i.e.: everything in the list remains at its place.
The only change with the above is:
~ public FormulaTransferHandler() {
~ this.localFormulaFlavor = new ActivationDataFlavor(Object[].class,
~ DataFlavor.javaJVMLocalObjectMimeType, "Arrays of objects");
~ }
Also, I note that this should actually belong on c.l.j.gui, so f-up to
there.
Thanks already, though!
H.
- --
Hendrik Maryns
http://tcl.sfs.uni-tuebingen.de/~hendrik/
==================
http://aouw.org
Ask smart questions, get good answers:
http://www.catb.org/~esr/faqs/smart-questions.html
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)
Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org
iEYEARECAAYFAkiErq8ACgkQBGFP0CTku6NvkQCeLxauaEPalb2tjpwCqMewPHsw
0xEAoMXrJPy98GjUZwq5bNufuUBlb3/u
=yXs+
-----END PGP SIGNATURE-----