Muovere JPanel con mouse

di il
1 risposte

Muovere JPanel con mouse

Salve, sto scrivendo un interfaccia grafica per un programma di rendering per un progetto universitario. La mia interfaccia consiste di un JFrame che contiene 4 Jpanel, uno per il render e gli altri per la gestione degli oggetti nel render, questi 3 pannelli esclusivi (se vedi uno non vedi gli altri 2) vengono attivati al click del corrispondente Jbutton; tutto molto carino ma c'è un problema: il mio professore vuole che l'utente abbia la possibilità di muovere i 3Jpanel a piacimento nello spazio. -.- dunque è possibile permettere all'utente di gestire il posizionamento del JPannel con il mouse?
Ho provato a trasformare i JPanel in JFrame, ok i pannelli si possono muovere con il mouse ma quando clicco su un altro pannello il precedente scompare, quindi non va bene. L'idea del mio prof è quella di avere dei pannelli simili alle finesetre degli strumenti di Photoshop! Spero di essere stata chiara ma soprattutto spero che qualcuno posso aiutarmi!!

1 Risposte

  • Re: Muovere JPanel con mouse

    nikketta ha scritto:


    dunque è possibile permettere all'utente di gestire il posizionamento del JPannel con il mouse?
    Se vuoi realizzare una interfaccia di quelle che vengono definite MDI (Multiple-Document Interface), dovresti usare JDesktopPane e JInternalFrame. Vedi il tutorial ufficiale:
    How to Use Internal Frames
    In questo scenario il ridimensionamento/spostamento dei frame interni è già gestito in automatico e di serie, non devi fare nulla di particolare per gestirlo.
    Se seguirai questa strada, leggi bene il tutorial, che spiega anche la sequenza di metodi da usare per creare e visualizzare correttamente i frame interni.

    Se invece vuoi trascinare dei JPanel che sono dentro un qualunque contenitore, allora le cose vanno diversamente e devi scrivere un po' di codice in più. Innanzitutto i pannelli devono stare dentro un "contenitore" senza layout manager ( contenitore.setLayout(null); per intenderci).
    Questo contenitore potrebbe essere il content-pane del JFrame o un pannello apposito messo a sua volta nel content-pane in CENTER del suo BorderLayout. Non ha importanza ... nel senso che cambia poco/nulla. I pannelli contenuti nel contenitore poi andranno inizialmente posizionati e dimensionati esplicitamente (setBounds oppure setLocation+setSize).

    Poi devi registrare un MouseListener e un MouseMotionListener su ciascun pannello che vuoi muovere. Al mousePressed prendi la posizione del mouse e la tieni da qualche parte. Al mouseDragged, prendi la posizione del mouse, fai la differenza con la posizione salvata ed hai uno spostamento relativo, che devi applicare al pannello, quindi salvi la posizione corrente. Al successivo mouseDragged idem e vai avanti così ragionando per spostamenti relativi.

    Valuta le due opzioni, se hai dubbi, chiedi pure.
Devi accedere o registrarti per scrivere nel forum
1 risposte