Drag And Drop di un JButton in Java swing

di il
5 risposte

Drag And Drop di un JButton in Java swing

Ciao a tutti,
il mio problema è questo:
ho 2 JPanel affiancati, nel primo ho in serie di JComponent (bottoni,label, checkbox ecc..).
Voglio che l'utente possa utilizzare questi componenti, scegliendoli tramite drag and drop, per comporre l'interfaccia che vuole nel secondo pannello. I componenti devono essere copiati naturalmente dopo il trascinamento, non spostati, così che possa anche decidere di mettere 3 button, 2 label ecc.. spero di essere stata chiara nella spiegazione
idee?

5 Risposte

  • Re: Drag And Drop di un JButton in Java swing

    manumori90 ha scritto:


    ho 2 JPanel affiancati, nel primo ho in serie di JComponent (bottoni,label, checkbox ecc..).
    Voglio che l'utente possa utilizzare questi componenti, scegliendoli tramite drag and drop, per comporre l'interfaccia che vuole nel secondo pannello. I componenti devono essere copiati naturalmente dopo il trascinamento, non spostati, così che possa anche decidere di mettere 3 button, 2 label ecc.. spero di essere stata chiara nella spiegazione
    idee?
    Stai cercando di realizzare una specie di "designer" della interfaccia utente? A seconda di come deve poi risultare e comportarsi il tutto, quella che hai posto è solo una delle (tante) problematiche da affrontare! (lo dico non per demoralizzarti o altro ... ci mancherebbe)

    Tieni presente che in Java esiste il concetto di "Drag&Drop" tra componenti ma serve più che altro a trasferire "dati" .... non i componenti stessi.

    P.S. Ti chiederei di chiarire meglio tutto il contesto: dove dovranno essere messi quei componenti, se c'è un layout manager o li vuoi disporre in modo "arbitrario", se vuoi poterli modificare con click/movimenti del mouse (es. stando sui bordi di un componente in design-mode lo puoi ridimensionare), ecc....
  • Re: Drag And Drop di un JButton in Java swing

    Stai cercando di realizzare una specie di "designer" della interfaccia utente?
    si, è proprio quello che voglio fare.
    L'utente deve creare la sua interfaccia con i componenti che io gli presento, in più, una volta "copiati" nel pannello dedicato al drop, può spostarli ancora, modificarli (la dimensione ad esempio di textField, rinominarli (nel caso di un jbutton) ecc..e anche eliminarli. alla fine salverà il suo lavoro finale che servirà a me per generarne il file xml con i vari tag inseriti

    Non so se hai presente la creazione della GUI per un'app android in eclipse.. Il funzionamento dovrà essere lo stesso
  • Re: Drag And Drop di un JButton in Java swing

    manumori90 ha scritto:


    L'utente deve creare la sua interfaccia con i componenti che io gli presento, in più, una volta "copiati" nel pannello dedicato al drop, può spostarli ancora, modificarli (la dimensione ad esempio di textField, rinominarli (nel caso di un jbutton) ecc..e anche eliminarli. alla fine salverà il suo lavoro finale che servirà a me per generarne il file xml con i vari tag inseriti
    Ma ho capito benissimo
    Il punto è che, lo ripeto, tutto quanto insieme non è affatto una cosa "banale" e ci sono tutta una serie di problematiche da affrontare.
    Tanto per dirne una: se un componente è nella tua area in "design-mode", in realtà non dovrebbe comportarsi come fa realmente di norma. Se metti un pulsante, il pulsante non dovrebbe "deprimersi" al click.

    Quindi la prima idea che mi verrebbe in mente è di avere un pannello in cui non ci sono "veri" componenti (cioè non componenti inseriti fisicamente nel pannello come di norma es. pannello.add(xyz) ) ma solo "proiezioni" dei componenti disegnati con del custom painting nel pannello. Questo avrebbe diversi vantaggi tra cui ad esempio il poter gestire gli eventi come si vuole o ad esempio disegnare un bordo rosso o i classici quadratini (le "maniglie") per i ridimensionamenti.

    Se hai voglia di scendere man mano nei dettagli e vedere le varie problematiche, si può continuare. Se invece perseveri solo con "voglio fare il drag&drop e basta" .... mi spiace ma onestamente non so quanto andrai avanti.
  • Re: Drag And Drop di un JButton in Java swing

    Giusto, non avevo pensato a questo!

    La tua idea va bene, a me non servono necessariamente i componenti reali, basta come hai detto tu la loro proiezione.. a me serve solo per capire quale componente sceglie l'utente, che sia cliccabile o no non mi interessa per ora..

    Che altro dettaglio ti viene in mente, perchè io sono totalmente in panne
  • Re: Drag And Drop di un JButton in Java swing

    manumori90 ha scritto:


    La tua idea va bene, a me non servono necessariamente i componenti reali, basta come hai detto tu la loro proiezione.. a me serve solo per capire quale componente sceglie l'utente, che sia cliccabile o no non mi interessa per ora..
    Guarda, due possibilità agli "opposti" sono queste:

    1) Se devi trattare anche componenti AWT o se non ti infastidisce il fatto di avere nel designer dei "veri" componenti, puoi fare un tuo pannello (estende es. JPanel) senza layout manager (=posizionamento assoluto) in cui inserisci realmente i vari componenti. Gestire il "trascinamento" dei componenti nel pannello è relativamente facile mentre visualizzare di volta in volta delle "decorazioni" su un componente specifico (bordo, quadratini per ridimensionamenti, ecc...) è un po' più difficile a seconda di dove/come devono presentarsi.

    2) Se vuoi trattare solo componenti Swing e vuoi che non ci siano "veri" componenti ma solo loro "proiezioni", allora puoi fare sempre un tuo pannello (non conta il layout manager) in cui disegni tutto nel suo paintComponent(Graphics). All'interno del tuo pannello mantieni una "lista" di oggetti di una tua classe es. DesignComponent. Quest'ultima non è un componente ma una semplice classe che incapsula un qualunque JComponent. Ci metti un metodo es. draw(Graphics) che semplicemente invoca il paint sul componente con quel Graphics.
    Ogni volta che il tuo pannello deve ridisegnarsi (paintComponent), iteri la lista e invochi i draw dei vari DesignComponent.
    Gestire il trascinamento è un pochino più complesso rispetto a 1) mentre hai piena liberta per eventi ed eventuali decorazioni (che possono richiedere comunque un po' di lavoro).

    Ovviamente non è tutto qui .... valuta le due opzioni e prova ad implementarne una (o entrambe). Se hai dubbi, chiedi pure.
Devi accedere o registrarti per scrivere nel forum
5 risposte