2009-02-16 12 views
6

Ho un problema molto specifico e volevo sapere se c'è un modo per cambiare il proprietario di un JDialog (può essere impostato usando il costruttore). Suppongo che non ci sia alcuna possibilità "ufficiale" (oltre a un trucco), ma volevo essere sicuro di non aver perso qualcosa. Qualsiasi idea o suggerimento sull'argomento sarebbe utile, grazie già ...C'è un modo per cambiare il proprietario di un JDialog?

+0

Perché mai vorresti farlo? – Bombe

risposta

7

Se la tua domanda è su come riutilizzare i dialoghi durante il ciclo di vita dell'applicazione, allora un modo migliore è quello di:

  1. definire tutti i contenuti di dialogo come JPanel sottoclassi
  2. e istanziare un nuovo JDialog con l'esistente JPanel esempio sottoclasse

Per il punto 2, si può ovviamente utilizzare la valutazione pigra dei pannelli (istanziare a prima usare solo, quindi riutilizzare).

Sarà inoltre necessario che i pannelli implementino un'interfaccia (propria) che consenta di re-inizializzarli per il riutilizzo in un nuovo JDialog (in genere reinire significa reintegrare tutti i contenuti dei campi o impostare questi campi sul proprio valori standard).

1

L'unica cosa che posso pensare cade sotto un hack non sicuro (usa il riflesso e altera il proprietario, ma che potrebbe cambiare in una versione diversa della JVM (anche dallo stesso vensore sulla stessa piattaforma)).

Forse una domanda migliore da porsi è "questo è quello che sto cercando di fare ... ho davvero bisogno di cambiare il proprietario della finestra di dialogo o c'è un modo migliore"? Sto cercando di pensare a dei motivi per voler cambiare il proprietario e non riesco a trovare nessuno ...

1

j:

Ho avuto una simile esigenza per una singola finestra di dialogo "globale" nella mia applicazione per servire una finestra di dialogo "note" quando il testo in una cella di tabella è troppo lungo per essere visualizzato. In questo caso, l'utente può passare con il mouse o fare clic con il pulsante destro del mouse sulla cella e ottenere una finestra di dialogo che visualizzi l'intero testo. Tuttavia, volevo che la finestra di dialogo fosse visualizzata rapidamente, specialmente quando si passava il mouse, quindi volevo semplicemente mostrarlo e nasconderlo. Ho deciso di creare e archiviare questa finestra di dialogo nella classe principale con il frame dell'applicazione come proprietario. Quindi, ogni volta che una vista di cui il proprietario era il frame aveva bisogno della finestra delle note, la vista poteva ottenerla dalla classe principale. In quei casi in cui una finestra di dialogo richiedeva la finestra di dialogo delle note, la finestra di dialogo principale poteva creare una nuova istanza della finestra di dialogo delle note con il proprietario appropriato. Dal momento che queste finestre di dialogo genitore (almeno nella mia app) vengono eliminate quando chiuse, l'istanza della finestra di dialogo delle note aggiuntive non rientra nell'ambito di applicazione e viene eliminata. Spero possa aiutare.

Problemi correlati