Ciao a tutti, come faccio a "passare" delle variabili da una finestra JDialog al JFrame?
Ciao a tutti, come faccio a "passare" delle variabili da una finestra JDialog al JFrame?
-------------------------------------------------
Il fumo nuoce gravemente alla salute
creai un costruttore del JFRame che prenda le variabili che gli passi (es. public myFrame(int i, String s))
Poi su JDialog scrivi new myFrame(myInt, myString).
Spero di essere stato chiaro... :mavieni:
Oppure usi la gestione degli eventi: il JFrame implementa l'interfaccia EventListener e il JDialog genera eventi (che possono quindi contenere le variabili che ti interessano) che vengono "lanciati" verso l'EventListener.
Se hai bisogno di chiarimenti chiedi.
Ciao
ghinz
cioè in pratica dovrei fare[supersaibal]Originariamente inviato da ghinz
Oppure usi la gestione degli eventi: il JFrame implementa l'interfaccia EventListener e il JDialog genera eventi (che possono quindi contenere le variabili che ti interessano) che vengono "lanciati" verso l'EventListener.
Se hai bisogno di chiarimenti chiedi.
Ciao [/supersaibal]
public class test extends JFrame implements EventListener{
mentre nella JDialog, cosa devo fare?
-------------------------------------------------
Il fumo nuoce gravemente alla salute
Allora:
prima creati una classe "Evento" del tipo
Quando crei il dialog, gli "registri" dentro il frame come EventListener:codice:// aggiungi magari del codice per fare il get/set di un oggetto generico che sarà il valore che ti interessa trasportare dal dialog al frame. public class mioEvento extends EventObject { } public class frame extends JFrame implements EventListener { public void mioEventoPerformed(mioEvento e) { // qui dentro leggi il contenuto di mioEvento (il valore) e fai quello che devi fare } } public class dialog extends JDialog { Vector listeners = new Vector(); public void addMioEventoListener(EventListener el) { listeners.add(el); } public void removeMioEventoListener(EventListener el) { listener.remove(el); } public void notificaMioEvento(mioEvento ev) { for (int i=0;i<listeners.size();i++) { (EventListener)listeners.get(i).mioEventoPerformed(ev); } } }
Adesso quando vuoi passare un valore da dialog a frame, fai così (da dentro dialog):codice:frame f = new frame(...); dialog d = new dialog(...); d.addMioEventoListener(f);
Facendo così tutti i listener registrati in dialog vengono avvisati del nuovo evento che hai appena creato. Il loro metodo mioEventoPerformed provvederà a gestire il valore (e.getValore()....).codice:MioEvento e = new MioEvento(); e.setValore(valore); notificaMioEvento(e);
Ho tirato un po' via, spero tu ci capisca qualcosa...
Ciao
ghinz
Io ho il seguente codice, e mi domandavo come potevo integrare quello che mi hai consigliato con esso?
public class test extends JFrame implements EventListener{
private JDialog dialog;
public test(){
setTitle("test");
setBounds(100,100,420,300);
JMenuBar menuBar = MenuBar1();
JPanel northPanel = new JPanel();
JToolBar toolbar = ToolBar1();
northPanel.add(toolbar);
getContentPane().add(BorderLayout.NORTH,northPanel );
setJMenuBar(menuBar);
dialog = new JDialog(this,"",true);
dialog.setBounds(300,100,250,150);
dialog.getContentPane().setLayout(new BorderLayout());
dialog.setDefaultCloseOperation(JFrame.HIDE_ON_CLO SE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
class voceJmenuBar implements ActionListener {
public void actionPerformed(ActionEvent e) {
JPanel northPanel = new JPanel();
provaField = new JTextField(2);
northPanel.add(provaField);
northPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
dialog.getContentPane().add(BorderLayout.NORTH,nor thPanel);
dialog.setVisible(true);
}
}
-------------------------------------------------
Il fumo nuoce gravemente alla salute
Cioè il mio problema è il seguente io all'interno della JDialog ho un JTextField, ecco quello che io scrivo in questo JTextField, vorrei che venisse ripreso una volta che io chiudo la JDialog, all'interno del JFrame!
Non so se mi sono spiegato...
-------------------------------------------------
Il fumo nuoce gravemente alla salute
* Crea il JFrame.
* Crea il JDialog.
* Quando chiudi il dialog in seguito alla pressione del pulsante OK salva il contenuto del text field in una variabile privata (chiamiamola _editedText) del dialog.Implementa un metodo getEditedText() che ti ritorni _editedText.
* Dal frame invoca getEditedText() per ottenere il test editato nel dialog.
Penso sia la soluzione più semplice e funzionante.
Questo è l'action del pulsante ok
ok.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
try{
dialog.setVisible(false);
prova = provaField.getText();
System.out.println(prova);
}
catch (Exception ex)
{}
}
});
e fin qui ci sono, ora la mia domanda è questa come faccio a invocarlo dal Jframe?
-------------------------------------------------
Il fumo nuoce gravemente alla salute
Modifica il programma. Crea una classe che estenda JDialog e forniscile il metodo getEditedText()...
è scontato che l'inizializzazione del dialog viene fatta all'interno del costruttore dello stesso.codice:public class EditDialog extends JDialog { private String _editedText; ... ... public String getEditedText() { return _editedText; } ... ... }
L'uso che ne farai all'interno del frame è:
codice:EditorDialog dialog = new EditorDialog(this); dialog.show(); String editedText = dialog.editedText();