Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-03-2006, 14:03   #1
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
Drag Drop

Ciao a tutti

Ho una web-application scritta in java-jsp ora devo implentare nella mia applicazione una funzione drag-drop ma non so da dove iniziare potete darmi una mano?
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 16:22   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
I package interessati sono essenzialmente java.awt.datatransfer e java.awt.dnd.

Supponiamo che hai un JTree da cui vuoi fare il DRAG. Avrai bisogno di una classe che implementi DragGestureListener, la quale e' preposta ad "ascoltare" i drag e decidere se dare inizio o meno all'operazione in questione.

Farai questa operazione in
void dragGestureRecognized(DragGestureEvent e)

Una volta hai stabilito che quel nodo/item/quello che vuoi puo' essere draggato, chiamerai e.startDrag(), dove e e' l'oggetto DragGestureEvent di cui sopra.

Quando chiami questa procedura, dovrai specificare
- I dati che vuoi trasferire;
- Il loro "flavor". E' qualcosa simile ad il tipo (per esempio, se e' un file, se e' un testo, ecc.).

La procedura di drag avra' quindi inizio. Ovviamente avrai bisogno di implementare anche il drop (qualcuno che sia disposto ad accettare i dati che stai trasportando), ma questo post sta diventando troppo lungo, per cui ne parleremo nel caso ce ne sia bisogno

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 17:48   #3
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
stavo vedendo anche webdav
http://www.thethirdbridge.com/doItYourself/index.html

ho fatto come dice nel sito ma non mi funziona
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 23-03-2006, 17:57   #4
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da texerasmo
stavo vedendo anche webdav
http://www.thethirdbridge.com/doItYourself/index.html

ho fatto come dice nel sito ma non mi funziona
Ho guardato il link in questione ma non ho trovato le info di cui parli.
Pensavo che dovessi implementare una soluzione simile in Java...
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 10:44   #5
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
si dovrei fare un cosa del genere.
Stavo vedendo se webdav mi ritorna utile.
Tu che ne pensi?
mi conviene fare un cosa tutta mia?
hai degli esempi...



Per vedere webdav dovevo fare

devo fare da Internet Explorer File-->APRI--->IP:8080 chek cartellaweb e funziona
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 10:50   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da texerasmo
si dovrei fare un cosa del genere.
Stavo vedendo se webdav mi ritorna utile.
Tu che ne pensi?
mi conviene fare un cosa tutta mia?
hai degli esempi...



Per vedere webdav dovevo fare

devo fare da Internet Explorer File-->APRI--->IP:8080 chek cartellaweb e funziona
Purtroppo non so cosa sia webdav, per cui non so valutare se ti convenga fare una cosa tua oppure utilizzare questo strumento.

Di esempi su Internet ce ne sono centinaia. Purtroppo, quando si comincia ad affrontare un argomento come questo, e' sempre un po' difficile per cui ti posso aiutare (meglio: ti possiamo, qui nel forum c'e' tanta gente in grado di aiutarti).

Cmq, come avevo accennato, nel caso tu voglia affrontare il problema attraverso l'uso delle classi standard Java, ti conviene fare un passo alla volta: Drag e Drop sono operazioni affrontabili separatamente. Comincia dalla prima.

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 13:39   #7
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Neanche a farlo apposta, ho ancora il codice di mini-framework creato per "semplificare" un certo uso del drag-and-drop (mini-mini, è una classe ). Sono 180 linee per cui prima di affligerti con il codice direi di vedere se è attinente al tuo problema.

Quello che ho è un modello per trasferire un certo tipo di oggetti da uno o più componenti AWT/Swing verso uno o più componenti AWT/Swing attraverso il drag and drop. E' applicabile nel caso in cui il client sia un Applet o un'applicazione AWT/Swing, non nel caso di un thin client per applicazioni web. Richiede inoltre Java 5.

Se credi faccia al caso tuo, posso incollare il codice .
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 15:15   #8
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da PGI-Bis
Neanche a farlo apposta, ho ancora il codice di mini-framework creato per "semplificare" un certo uso del drag-and-drop (mini-mini, è una classe ). Sono 180 linee per cui prima di affligerti con il codice direi di vedere se è attinente al tuo problema.

Quello che ho è un modello per trasferire un certo tipo di oggetti da uno o più componenti AWT/Swing verso uno o più componenti AWT/Swing attraverso il drag and drop. E' applicabile nel caso in cui il client sia un Applet o un'applicazione AWT/Swing, non nel caso di un thin client per applicazioni web. Richiede inoltre Java 5.

Se credi faccia al caso tuo, posso incollare il codice .
non è che potresti mandarlo anche a me, visto che sono mooolto interessato.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 16:45   #9
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Lo incollo perchè più o meno è in argomento ma sottolineo che potrebbe non essere quello che serve a texerasmo.

EasyDND

Codice:
package it.easydnd;

import java.awt.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
import java.io.IOException;
import java.util.*;

public class EasyDND<T> extends DropTargetAdapter 
	implements DragGestureListener {
	/* Identifica il genere di dati trasferibili attraverso questo meccanismo */
	private DataFlavor transferFlavor = 
		new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType, null);
		
	/* Collegamento al gestore dei prelevamenti e dei depositi di 
	valori trasferibili */
	private DNDSystem<T> dndSystem;
	
	private EasyDND(DNDSystem<T> d) {
		dndSystem = d;
	}
	
	/** @inheritDoc */
	public void dragGestureRecognized(DragGestureEvent e) {
		T value = dndSystem.dragRequest(e.getComponent(), e.getDragOrigin());
		if(value != null) {
			e.startDrag(DragSource.DefaultMoveDrop, 
				new EasyTransferable(value, e.getComponent()));
		}
	}
	
	/** @inheritDoc */
	public void drop(DropTargetDropEvent e) {
		if(isValidDropEvent(e)) 
			processDrop(e);
		else
			e.rejectDrop();
	}
	
	public void dragExit(DropTargetEvent e)  {
		e.getDropTargetContext().getDropTarget().setActive(false);
	}
	
	/* Richiede al DNDSystem l'autorizzazione al rilascio del valore */
	private boolean dropAllowed(DataPack pack, DropTargetDropEvent e) {
		return dndSystem.dropRequest(
			pack.data,
			e.getDropTargetContext().getComponent(),
			e.getLocation(),
			pack.component);
	}
	
	/* Informa il DNDSystem che il rilascio è terminato */
	private void notifyDropComplete(DataPack pack, DropTargetDropEvent e) {
		e.dropComplete(true);
		dndSystem.dropCompleteNotify(
			pack.data, 
			e.getDropTargetContext().getComponent(), 
			e.getLocation(), 
			pack.component);
	}
	
	private DataPack extractDataPack(DropTargetDropEvent e) throws Exception {
		Transferable t = e.getTransferable();
		return (DataPack)t.getTransferData(transferFlavor);
	}
	
	/** true per un trasferimento intra jvm di un oggetto java */
	private boolean isValidDropEvent(DropTargetDropEvent e) {
		return e.isLocalTransfer() && e.isDataFlavorSupported(transferFlavor);
	}
	
	/* estrae i dati trasferiti e dialoga con DNDSystem per il rilascio */
	private void processDrop(DropTargetDropEvent e) {
		e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
		try {
			DataPack pack = extractDataPack(e);
			if(dropAllowed(pack, e))
				notifyDropComplete(pack, e);
			else
				e.dropComplete(false);
		} catch(Exception ex) {
			System.err.println(ex.getMessage());
			e.dropComplete(false);
		}
	}
	
	/* Coppia di valori (Component, T) */
	private class DataPack {
		private Component component;
		private T data;
		
		private DataPack(T d, Component c) {
			data = d;
			component = c;
		}
	};
	
	/* Tipo di dato trasferibile usato dal sistema: trasporta un DataPack */
	private class EasyTransferable implements Transferable {
		private DataPack dataPack;
		
		private EasyTransferable(T data, Component source) {
			dataPack = new DataPack(data, source);
		}
		
		public DataPack getTransferData(DataFlavor f) 
			throws UnsupportedFlavorException {
			if(!isDataFlavorSupported(f)) 
				throw new UnsupportedFlavorException(f);
			return dataPack;
		}
		
		public DataFlavor[] getTransferDataFlavors() {
			return new DataFlavor[] { transferFlavor };
		}
		
		public boolean isDataFlavorSupported(DataFlavor f) {
			return f.equals(transferFlavor);
		}

	};
	
	/** Genera i collegamenti necessari al funzionamento del sistema di 
	drag and drop.
	@param dndSys centro di controllo dei trasferimenti
	@param dragComponents insieme dei componenti sorgente di eventi 
	di trascinamento
	@param dropComponents insieme dei componenti bersaglio di eventi 
	di rilascio */
	public static <E> void createDNDContext(
		DNDSystem<E> dndSys,
		Collection<? extends Component> dragComponents, 
		Collection<? extends Component> dropComponents) 
	{
		EasyDND<E> dnd = new EasyDND<E>(dndSys);
		DragSource ds = DragSource.getDefaultDragSource();
		for(Component c : dragComponents) {
			DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer(
				c, DnDConstants.ACTION_COPY_OR_MOVE, dnd);
		}
		for(Component c: dropComponents) {
			DropTarget dt = new DropTarget(c, dnd);
		}
	}
	
	/** Interfaccia concretizzata da chi voglia controllare il sistema di 
	drag and drop costruito attraverso il metodo createDNDContext di EasyDND */
	public static interface DNDSystem<E> {
		
		/** Notifica di drop completato
		@param value il valore rilasciato
		@param target il componente bersaglio del rilascio
		@param location il punto di rilascio su target
		@param origin il componente da cui è partito il trascinamento */
		void dropCompleteNotify(
			E value, Component target, Point location, Component origin);
		
		/** Richiesta di un valore da trasferire.
		@param source il componente da cui parte il trascinamento
		@param origin il punto di partenza del trascinamento
		@return E il valore da trasferire o null */
		E dragRequest(Component source, Point origin);
		
		/** Richiesta di rilascio di un valore in trasferimento.
		@param value il valore trasferito
		@param target il componente bersaglio del rilascio
		@param location il punto di rilascio sul componente target
		@param origin il componente da cui è partito il drag and drop */
		boolean dropRequest(
			E value, Component target, Point location, Component origin);
	};
}
A questo punto mi è parso che ci si potesse concentrare sul dato da trasferire anzichè sulla meccanica del trasferimento. Ho anche un applicazione di prova che si occupa di trasferire degli oggetti BimBum (il nome la dice lunga) da un pannello ad un altro.

BimBum.java

Codice:
package it.easydnd;

import java.util.Calendar;

public class BimBum {
	private String note;
	private Calendar date;
	
	public BimBum(String noteValue, Calendar dateValue) {
		note = noteValue;
		date = dateValue;
	}
	
	public String getNote() {
		return note;
	}
	
	public Calendar getDate() {
		return date;
	}
}
Test.java

Codice:
package it.easydnd;

import static it.easydnd.EasyDND.DNDSystem;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;

public class Test extends JPanel implements DNDSystem<BimBum> {
	private JPanel dragPanel = new JPanel(new GridLayout(3, 1));
	private JPanel dropPanel = new JPanel(new GridLayout(3, 1));
	private JPanel separator = new JPanel();
	
	public Test() {
		super(new BorderLayout());
		EasyDND.<BimBum>createDNDContext(this, 
			Arrays.asList(dragPanel), 
			Arrays.asList(dropPanel));
		JLabel one = format(new JLabel("One"));
		JLabel two = format(new JLabel("Two"));
		JLabel three = format(new JLabel("Three"));
		format(dragPanel);
		format(dropPanel);
		dragPanel.add(one);
		dragPanel.add(two);
		dragPanel.add(three);
		dragPanel.setPreferredSize(new Dimension(100, 20));
		dropPanel.setPreferredSize(new Dimension(100, 20));
		separator.setPreferredSize(new Dimension(20, 20));
		add(dragPanel, BorderLayout.LINE_END);
		add(dropPanel, BorderLayout.LINE_START);
		add(separator, BorderLayout.CENTER);
	}
	
	/** EasyDND notifica a questo DNDSystem una richiesta di prelievo che
	interessa il componente source con punto di prelievo origin. Questo
	DNSystem autorizza il prelievo, restituendo il dato prelevando, o non
	autorizza il prelievo, restituendo null */
	public BimBum dragRequest(Component source, Point location) {
		if(source == dragPanel) {
			Component c = dragPanel.getComponentAt(location);
			if(c instanceof JLabel) {
				return new BimBum(((JLabel)c).getText(), 
					Calendar.getInstance());
			}
		}
		return null;
	}
	
	/** EasyDND notifica a questo DNDSystem una richiesta di rilascio del valore
	dropValue, proveniente da origin, sul componente target nel punto
	location. Il boolean restituito significa autorizzo (true) o non autorizzo
	(false) il rilascio. */
	public boolean dropRequest(BimBum dropValue, Component target, 
		Point location, Component origin) {
		if(origin == dragPanel) {
			JLabel l = format(new JLabel(dropValue.getNote()));
			dropPanel.add(l);
			dropPanel.validate();
			dropPanel.repaint();
			return true;
		} else {
			return false;
		}
	}
	
	/** EasyDND notifica a questo DNSystem il completamento di un'operazione
	drag-and-drop */
	public void dropCompleteNotify(BimBum droppedBum, Component target, 
		Point location, Component origin)
	{
		assert(origin instanceof Container);
		Container cont = (Container)origin;
		Component[] comps = cont.getComponents();
		for(Component c : comps) {
			if(c instanceof JLabel) {
				JLabel l = (JLabel)c;
				if(l.getText().equals(droppedBum.getNote())) {
					cont.remove(c);
				}
			}
		}
		origin.validate();
		origin.repaint();
	}
	
	/** Applica un formato predefinto ad un JComponent (le etichette in
	quest'applicazione */
	private <T extends JComponent> T format(T target) {
		target.setBorder(new CompoundBorder(
			new EmptyBorder(2, 2, 2, 2), new LineBorder(Color.BLACK)));
		target.setOpaque(true);
		target.setBackground(Color.WHITE);
		return target;
	}
	
	/** Punto d'entrata dell'applicazione */
	public static void main(String...args) {
		final JFrame f = new JFrame("DND Test");
		f.add(new Test());
		f.setSize(400, 400);
		f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				f.setVisible(true);
			}
		});
	}
}
Il "drag" è tradotto in: un certo componente riceve una richiesta di prelievo a partire dal punto P; se in quel punto e per quel componente, secondo lo stato dell'applicazione, esista qualcosa di trascinabile, un DNDSystem lo restituisce. Altrimenti restituisce null (dropRequest).

Il "drop" è diviso in due parti. Una richiesta di rilascio ed una notifica di rilascio andato a buon fine. Se alla richiesta di rilascio (dropAllowed) DNDSystem restituisca true, l'operazione si conclude con la notifica da parte di EasyDND del completamento delle operazioni (dropCompleteNotify).
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 16:54   #10
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
Grazie...
Questa cosa dovrei implementarla in una mi web-application.
Il nostro prodotto è un cms
L'utente deve poter uplodare un serie di file in certe dir.
cmq ora la provo spero che mi possa essere d'aiuto

Thka
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 17:22   #11
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
grazie mille.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Apple 'apre' iOS alle terze parti anche ...
Cloud sovrano: l'approccio di Broadcom c...
HONOR conferma l'arrivo in Italia di Mag...
La Cina sotto pressione impone maniglie ...
OpenAI integra le app in ChatGPT per tra...
NVIDIA sarebbe pronta a tagliare la prod...
Prezzo minimo storico per iPhone 16 Pro:...
Riot Games scopre una falla nei BIOS che...
Beats in super offerta su Amazon: aurico...
Batterie elettriche, Samsung SDI e Stell...
Clivet presenta Fullness, la pompa di ca...
SpaceX lancerà 167 razzi spaziali...
Yakuza Kiwami 3 e Dark Ties protagonisti...
Privacy a rischio: ecco la VPN che regis...
SpaceX ha annunciato che un satellite St...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v