Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Gioco Carte Java con Drag and Drop

    Salve, questo è il mio primo post, spero di non sbagliare nulla :-)
    Ho creato un gioco di carte in Java, ho implementato il drag and drop utilizzando le classi del pacchetto java.awt.dnd, funziona tutto...
    Adesso vorrei fare in modo che quando sposto la carta sul tavolo l'icona, della JLabel che rappresenta la carta, seguisse il cursore durante il trascinamento...
    Per fare ciò ho associato al mio JTavolo (classe che estende JPanel) un MouseMotionListener, posto qui la parte di codice interessata
    codice:
    public JTavolo(int diff){
     this.difficolta=diff;
     this.tavolo=new Tavolo(difficolta); 
     addMouseMotionListener(new MouseMotionListener() { 
    @Override public void mouseMoved(MouseEvent e) { }
     @Override public void mouseDragged(MouseEvent e) {
     System.out.println("Evento catch"); 
    JCarta c=(JCarta)e.getSource();
     Point p= e.getLocationOnScreen();
     paintCard(p.x, p.y, c.getIcona()); } });
     generaCarte(); 
    validate(); }
    Ho messo quel print per vedere se veniva chiamato il metodo ed effettivamente il metodo non viene chiamato per nulla :-)
    Io credo che il problema sia nel DnD, forse catcha tutti i movimenti del mouse e non viene generato per nulla il mouse event relativo al drag, se invece metto un print nel metodo mouseMoved, per ogni spostamento del mouse mi stampa quello che deve stamparmi...
    Non so se sono stato chiaro... avete qualche idea? grazie mille in anticipo

  2. #2
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160
    Hai provato ad aggiungere il MouseMotionListener ad ogni carta?!
    La legge e l'ordine saranno rispettati solo quando si concederà la giustizia a tutti indistintamente.

  3. #3
    Ci provo :-) grazie

  4. #4
    Ho aggiunto il MouseMotionListener ad ogni carta e l'evento viene catchato, però, quando trascino la carta viene disegnata sul pannello solo appena subito dopo la sua posizione poi si trasforma solo il cursore per indicare l'azione di drag e se il drop può essere accettato o meno...se invece disabilito il DragSourceListener da una carta questa segue sempre il cursore se effettuo il trascinamento e scompare una volta che rilascio il mouse(come dovrebbe essere) il problema è che viene dipinta sotto le altre carte del tavolo...
    Per dipingere la carta ho fatto l'override del metodo PaintComponent, chiamo il metodo DrawImage specificando, per ogni spostamento, le coordinate del puntatore relative al pannello, l'image dell'icona della carta e il suo imageObserver...
    Altri consigli? Non ho postato il codice perché diviso in più classi...

  5. #5
    Ah! Avevo pensato di inserire un pannello trasparente sopra il JTavolo (extends javax.swing.JPanel) soltanto che, provando a fare l'add di un JPanel, specificando setOpaque(false), al mio JTavolo (che ha un GridLayout) il JPanel trasparente viene inserito nell'ultima posizione libera dopo l'ultima carta... la mia idea sarebbe quella di ricoprire il JTavolo con questo JPanel trasparente e disegnare li sopra la carta che si sposta...

  6. #6
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160
    Non so se ti possa essere d'aiuto l'uso del setComponentZOrder()
    ZOrder
    La legge e l'ordine saranno rispettati solo quando si concederà la giustizia a tutti indistintamente.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Io non ho mai lavorato con DND ancora, quindi questa potrebbe essere una emerita fesseria, comunque butto lì una mia alternativa:

    Provare a settare un cursor ( setCursor() ) sul JTavolo appena viene intercettato il D&D? Ovviamente dovresti prevedere un'immagine da usare come Cursor, ma credo che tu le abbia già...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Grazie, proverò il setComponentZOrder()... Per la questione del cursore c'avevo pensato, più che altro per eliminare il cursore di default del d&d, che prevede il divieto d'accesso quando un drop non è effettuabile, ma la classe java Cursor non prevede che un cursore sia creato da un'immagine, mi sa che li prende direttamente dai cursori di sistemi e con un numero intero definisce quale di quelli disponibili si possa usare...

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Sansone87
    ma la classe java Cursor non prevede che un cursore sia creato da un'immagine, mi sa che li prende direttamente dai cursori di sistemi e con un numero intero definisce quale di quelli disponibili si possa usare...
    Controlla la classe java.awt.Toolkit ed il relativo metodo createCustomCursor().


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Grazie per i consigli
    Purtroppo non riesco ad usare setComponenteZOrder... Ogni carta aggiunta al pannello ha un valore zOrder >0 mentre il pannello, che cmq è il container di queste carte, ha un valore -1, ovviamente non posso cambiare il valore del pannello, lancia una IllegalArgumetException...
    Resta il fatto che, anche se riuscissi a far "volare" la carta trascinata sopra le altre, il meccanismo non funziona per le carte in cui è settato un DragSourceListener...
    Altre idee? Adesso provo ad impostare un cursore con l'immagine che prelevo dalla carta e vi faccio sapere

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.