Oppure

Loading
28/03/10 18:01
killer
salve a tutti..chiedo un aiuto urgentissimo riguardo al drag and drop..
vi allego una pikkolissima applicazione cosi mi date una mano a capire cosa dovrei modificare per risolvere il problema.
pratikamente ho un interfaccia come vedrete..un uniko frame di prova sul quale
ce un jbutton che vorrei si muovesse quando viene trascinato...esattamente con il drag and drop...
il problema grave lo notorete anche voi..
Acquisico le cordinate del cursore con int x= evt.getX(); e int y =evt.getY();
dopo di ke scrivo jButton.setLocation(x,y); e ridisegnando la grafica con il repaint()...ma tutto questo non funziona correttamente come dovrebbe..ossia si notano effetti strani durante il trascinamento..e credo proprio ci sia qualcosa da modificare affiche fila tutto per il verso giusto. come fare ? aiutatemi per favore sto impazzendo..grazie anticipatamente..
ah ultima cosa: vorrei se possibile che il cursore,durante il trascinamento sia proprio sul jbutton e non in alto e il jbutton spostato piu sotto..rispondetemi presto..
aaa
28/03/10 19:06
netarrow
il metodo di gestione dell'evento dragged deve essere così:

 private void jButton1MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseDragged

        int x = evt.getX();
        int y = evt.getY();
		Point p = SwingUtilities.convertPoint(jButton1, evt.getPoint(), this.getContentPane());
		jButton1.setBounds(p.x - jButton1.getWidth() / 2, p.y - jButton1.getHeight() / 2, jButton1.getWidth(), 
						   jButton1.getHeight());
    }//GEN-LAST:event_jButton1MouseDragged
aaa
28/03/10 19:17
killer
ok grazie...pero potresti farmi capire a cosa serve il metodo statico convertPoint() ? e a seguire i calcoli tra virgolette matematici che hai fatto nel metodo bounds ?! ehm..scusami ancora...oltre a questo volevo chiederti ..come è possibile non far superare i margini del frame quando sposto un oggetto !? fammi sapere presto..e grazie ancora
Ultima modifica effettuata da killer 28/03/10 19:37
aaa
29/03/10 21:05
netarrow
quei due conti banalmente mettono il bottone in maniera tale che il cursore del mouse sia al centro, facendo un semplice spostamento del controllo della metà della sua dimensione, centrando di fatto il mouse.


per quanto riguarda il perchè ho usato quel metodo... giusta domanda! così ti spiego come trovare da solo soluzioni a problemi di questo tipo.
ho cercato su google "how to drag a jbutton", visto che qualsiasi cosa tu voglia sviluppare che sia nella norma, quasi sicuramente qualcun altro l'ha già fatta e molto meglio di quanto possa essere una tua prima versione; eventualmente modifichi la sua. Quindi primo risultato (forum ufficiale java), ultimo post; adattandolo con il centramento del cursore di cui parlavi.

ora, quel metodo a guardare la documentazione semplicemente trasforma le coordinate da un sistema di riferimento ad un altro, in questo caso passa dal sistema del bottone al sistema del contentPane, se non ti è chiaro leggi questo: it.wikipedia.org/wiki/….

sul bloccare il bottone basta un if per verificare che le coordinate non siano più grandi di quelle che stanno nella parte visibile, facendo un paio di conti per considerare anche la superfice del bottone stesso.
aaa
29/03/10 21:19
killer
ok ok..grazie mille...sai vorrei imparare tantissimo per diventare un grande programmatore..pero non so quali libri completi potrei utilizzare ..per la conoscenza di un intera base e di un intera conoscenza avanzata..
aaa
29/03/10 21:30
netarrow
l'obiettivo deve essere "entrare nell'ottica", cioè non è che devi sapere a memoria classi e metodi, l'unica cosa che è accettabile ricorda sono le cose che ricordi "a furia di farle".
a parte ovviamente quei concetti di base soliti della programmazione e dell'approccio OOP.
i libri sono poi cmq comodi perchè hai le informazione più importanti tutte li, strutturate e organizzate

il resto è capire qualè la filosofia che sta dietro la tecnologia, la libreria o quello che è, ed infine capire qualè la logica, il desing e l'architettura con cui ogni componente interagisce col resto del sistema.
Fatto questo potrai intuire "come potrebbe chiamarsi una classe/metodo che faccia questo?", a quel punto con un intellisense già potresti risolvere il problema, dando magari nel contempo una letta alla documentazione; se poi non basta bisogna riuscire a intuire come quello che vuoi fare sia chiamato nella rete, una volta che pensi nell'ottica di una tecnologia X, e riesci a cercare le cose col nome che tutti gli altri in rete gli danno, con google potrai trovare qualsiasi cosa.

ti dico questo non perchè non voglio che posti nel forum, ma perchè mi sono accordo che buona parte dei tuoi post sono cose che potresti risolvere da solo in 1 minuto, ci guadagni tu.

la prossima volta che hai un problema, oltre al problema stesso, posta anche come hai provato a cercare una soluzione su google e magari ti indirizzo.

Ultima modifica effettuata da netarrow 29/03/10 21:31
aaa