PDA

View Full Version : [java] passaggio di parametri tra finestre con swing


]DaLcA[
29-09-2006, 00:00
Ciao a tutti :) Ho cercato in rete, sul forum e nella documentazione di Java ma senza risultati. Come da titolo vorrei sapere se (e come) è possibile passare parametri tra finestre con le librerie grafiche swing di Java. In pratica vorrei potere aprire una finestra da un'altra finestra, passando un mio oggetto alla finestra da aprire, magari come parametro nel costruttore (soluzione che mi sembra più ovvia).


Grazie in anticipo :D

MEMon
29-09-2006, 00:24
Hai già detto tutto dov'è il problema? Ti crei una tua classe e passi l'oggetto al costruttore, che problema hai?

franksisca
29-09-2006, 08:14
Hai già detto tutto dov'è il problema? Ti crei una tua classe e passi l'oggetto al costruttore, che problema hai?
:rolleyes: :rolleyes: :rolleyes:

oppure puoi crearti una classe gestore con tutti gli oggetti dentro.....ma meglio la soluzione tua

]DaLcA[
29-09-2006, 09:59
Dalle varie definizioni dei metodi non ho visto nessun costruttore che accetta parametri "generali", per quello l'ho chiesto.

Ad ogni modo facendo qualche prova ho visto che è possibile impostare a piacimento i valori dei dialog creati ed aperti senza l'uso del costruttore (anche se l'avrei preferito), quindi credo di avere archiviato questo problema

franksisca
29-09-2006, 10:57
DaLcA[']Dalle varie definizioni dei metodi non ho visto nessun costruttore che accetta parametri "generali", per quello l'ho chiesto.

Ad ogni modo facendo qualche prova ho visto che è possibile impostare a piacimento i valori dei dialog creati ed aperti senza l'uso del costruttore (anche se l'avrei preferito), quindi credo di avere archiviato questo problema
guarda che puoi aggiungere tu un costruttore(o +) e farci quello che vuoi

andbin
29-09-2006, 11:06
Guarda che basta estendere i vari JFrame, JDialog, ecc....

Esempio con JFrame:
public class MioFrame extends JFrame
{
private MioOggetto mioOgg;

public MioFrame (MioOggetto mioOgg)
{
super ("Titolo finestra");

this.mioOgg = mioOgg;
}

// ....
}

fabio1883
29-09-2006, 14:11
Ciao, ho un problema simile...
Una volta aperto un nuovo jFrame (chiamato da un altro jFrame) come faccio a far ripassare i parametri inseriti dall'utente al jFrame chiamante?

Spero di essermi spiegato...

GRAZIE

MEMon
29-09-2006, 14:20
Ti conviene usare un JDialog modale, così da bloccare il JFrame chiamante fino a quando non hai chiudo la jdialog.
Ti fai una classe apposta che estenda jdialog, poi fai un metodo del tipo:

public Parametri getParametri(){
return parametri;
}

Che chiamerai nel JFrame chiamante dopo che hai chiudo la jdialog, così:
...nel jframe...
MiaDialog dialog=new MiaDialog();
dialog.setVisible(true);
--- qui si blocca il thread fino a quando la jdialog rimane attiva ---
Parametri p=dialog.getParametri(); //questa istruzione viene eseguito solo dopo che la jdialog
è stata chiusa

andbin
29-09-2006, 14:28
Ciao, ho un problema simile...
Una volta aperto un nuovo jFrame (chiamato da un altro jFrame) come faccio a far ripassare i parametri inseriti dall'utente al jFrame chiamante?Ma l'abbiamo appena spiegato io (con un esempio) e franksisca.

Se derivi una classe (es. JFrame), puoi mettere il costruttore con i parametri che vuoi tu e quindi passare al nuovo oggetto quello che ti serve.

MEMon
29-09-2006, 14:29
Mi sa che a lui interessa il processo inverso, ossia far tornare dei parametri al jframe chiamante, non passarli a quello chiamato.

andbin
29-09-2006, 14:43
Mi sa che a lui interessa il processo inverso, ossia far tornare dei parametri al jframe chiamante, non passarli a quello chiamato.oops, chiedo scusa, ho letto proprio male io. :doh:

Come fare 'sta cosa ... dipende. I JFrame non sono modali, quindi se ho un JFrame e ne apro un altro, i due vivono per conto loro. Inoltre in quale momento i dati vanno passati al JFrame chiamante?? Quando il JFrame chiamato si chiude? O in qualche altra condizione?? (es. pressione di un pulsante).

La cosa si può fare con le interfacce, ad esempio. Si crea una interfaccia che sarà implementata dal JFrame chiamante. Al JFrame chiamato passo un reference all'interfaccia e su questa invoco un metodo per passare dei dati al JFrame chiamante.
È una ipotesi, senza sapere di più, è difficile stabilire se l'uso delle interfacce va bene.

MEMon
29-09-2006, 14:44
oops, chiedo scusa, ho letto proprio male io. :doh:

Come fare 'sta cosa ... dipende. I JFrame non sono modali, quindi se ho un JFrame e ne apro un altro, i due vivono per conto loro. Inoltre in quale momento i dati vanno passati al JFrame chiamante?? Quando il JFrame chiamato si chiude? O in qualche altra condizione?? (es. pressione di un pulsante).

La cosa si può fare con le interfacce, ad esempio. Si crea una interfaccia che sarà implementata dal JFrame chiamante. Al JFrame chiamato passo un reference all'interfaccia e su questa invoco un metodo per passare dei dati al JFrame chiamante.
È una ipotesi, senza sapere di più, è difficile da dire.
Scusa se mi permetto ma la mia soluzione non ti piace visto che gliene proponi altre? :D

andbin
29-09-2006, 14:48
Scusa se mi permetto ma la mia soluzione non ti piace visto che gliene proponi altre? :DNo no, tranquillo, la tua va sicuramente bene. Però lui parlava solo di JFrame e non di JDialog.
Se gli va bene usare un JDialog modale, la tua soluzione è la migliore.

fabio1883
29-09-2006, 14:49
[CODE] ...nel jframe...
MiaDialog dialog=new MiaDialog();
dialog.setVisible(true);
--- qui si blocca il thread fino a quando la jdialog rimane attiva ---
Parametri p=dialog.getParametri(); //questa istruzione viene eseguito solo dopo che la jdialog
è stata chiusa


Il problema è che il thread non si blocca mentre la jdialog è attiva...
Mi sapresti dire cortesemente il perchè? GRAZIE 1000

MEMon
29-09-2006, 14:50
La tua JDialog deve essere modale, guarda la doc http://java.sun.com/j2se/1.5.0/docs/api/
scegli un costruttore che permetta di impostare la modalità "modal", la devi mettere true ovviamente.

andbin
29-09-2006, 14:54
Il problema è che il thread non si blocca mentre la jdialog è attiva...
Mi sapresti dire cortesemente il perchè? GRAZIE 1000Il JDialog va creato con il flag modal a true.
Se estendi JDialog, devi fare così:
public class MioDialog extends JDialog
{
public MioDialog (JFrame owner)
{
super (owner, true);
}
}

fabio1883
29-09-2006, 15:06
GRAZIE MEMon!!!!!

Un'ultima cosa....
Hai presente NetBeans?? Come faccio a dimensionare la jDialog? Ho guardato nelle proprietà, ho modificato i parametri altezza e larghezza ma me la disegna sempre piccola; ogni volta che eseguo il programma devo trascinare la finestra per ingrandirla e poterla leggere.

GRAZIE ANCORA

MEMon
29-09-2006, 17:02
La dimensiona la devi dare con setPreferredSize(Dimension) se già fai così controlla che non esegui un pack() perchè in tal caso la jdialog prende la dimensione minima di ciò che ci sta dentro, il problema è che se a quello che ci sta dentro non hai dato dimensione la dimensione sarà 0.

tomminno
30-09-2006, 14:50
Ciao, ho un problema simile...
Una volta aperto un nuovo jFrame (chiamato da un altro jFrame) come faccio a far ripassare i parametri inseriti dall'utente al jFrame chiamante?

Spero di essermi spiegato...

GRAZIE

Sono anni che non uso Java, ma non c'è niente nel linguaggio riguardo ai delegati?
In questo caso sono la soluzione adatta.

elbompr
02-10-2006, 23:09
:doh: mi interessa un corso java ma le giornate hanno 24hhhhh