Drag&Drop pliku do okienka

0

Po pierwsze, pracuję pod maciem (jeśli to będzie miało jakieś znaczenie w moim pytaniu).

Chciałbym zrobić aplikację, która wyśle plik na ftp i skopiuje link do schowka, z tym nie mam problemu.
Ale jak zrobić żeby można było upuścić jakiś plik w okienku aplikacji (w ogóle w okienku, lub na jakiś konkretny element), ponieważ nie chcę robić FileChoosera, tylko właśnie drag n drop, czyli przeciągam sobie plik do aplikacji i jest automatycznie wysyłany.

  • w wersji na macu, to samo, ale żeby aplikacja "łapała" plik po przeciągnięciu na ikonę w Docku?
    Wtedy mógłbym zrobić coś stylu: przeciągam plik na ikonkę w docku, aplikacja się uruchamia, wysyła go, kopiuje link do schowka i zamyka.
0

nie wiem jak z tym dockiem...
Ale poza tym, to robiłem dokładnie coś takiego niedawno...
http://www.google.pl/search?q=java+file+drag+n+drop
google pomocne, problemów nie miałem żadnych...
Gdybyś jednak mimo to miał, to mogę Ci podrzucić kawałek źródła...

1
kyle napisał(a)

... jak zrobić żeby można było upuścić jakiś plik w okienku aplikacji (w ogóle w okienku, lub na jakiś konkretny element), ponieważ nie chcę robić FileChoosera, tylko właśnie drag n drop, czyli przeciągam sobie plik do aplikacji i jest automatycznie wysyłany.

Do tego powinno wystarczyc Ci w zupelnosci java.awt.dnd. (i ew. java.awt.datatransfer.). Na sieci powinno byc pare przykladow.

kyle napisał(a)
  • w wersji na macu, to samo, ale żeby aplikacja "łapała" plik po przeciągnięciu na ikonę w Docku?
    Wtedy mógłbym zrobić coś stylu: przeciągam plik na ikonkę w docku, aplikacja się uruchamia, wysyła go, kopiuje link do schowka i zamyka.

Tutaj bedzie troche zabawy (chociaz praktycznie i tak mniej niz z powyzszym). A wiec, Apple dostarcza pakiet "Apple Java Extensions", ktory odrobine rozszerza mozliwosci aplikacji Java. Przyklad:

package my.mac.application;

import com.apple.eawt.Application;
import com.apple.eawt.OpenFilesHandler;
import com.apple.eawt.AppEvent.OpenFilesEvent;

public class DockDnD {
	public DockDnD() {
		Application app = Application.getApplication();
		app.setOpenFileHandler(new OpenFilesHandler() {
			
			@Override
			public void openFiles(OpenFilesEvent event) {
				JOptionPane.showMessageDialog(null,
						"Filename list: " + event.getFiles(),
						"Selected file",
						JOptionPane.INFORMATION_MESSAGE);
			}
		});
	}
}

I wszystko fajnie, gdyby nie to, ze w dokumentacji do metody Application.setOpenFileHandler(OpenFilesHandler) jest napisane: "... notifications are only sent if the Java app is a bundled application, with a CFBundleDocumentTypes array present in it's Info.plist". Do stworzenia *.app mozesz uzyc ANT'owego taska, JarBundler, np.:

<target name="do-bundle" depends="jar" description="Create Mac application bundle from JAR">
	<mkdir dir="release"/>
	<jarbundler dir="release"
	            name="DockDnD"
	            mainclass="my.mac.application.DockDnD" 
	            jar="${my-dnd.jar}">
		<!-- creates CFBundleDocumentTypes entries in Plist.info -->
		<documenttype name="All document types" ostypes="****" role="Viewer"/>
	</jarbundler>
</target>

Odsylam do dokumentacji "Apple Java Extensions API" i JarBundler po szczegoly.

1 użytkowników online, w tym zalogowanych: 0, gości: 1