PDA

View Full Version : [JAVA] Passaggio valore da jtextfield in un JFrame ad un'altra jtextfield in un altro


matteo p.
08-02-2012, 18:05
Ciao a tutti, come posso fare per passare il valore inserito in una jtextfield in una classe/jframe in un'altra jtextfield situata in un'altra class/jframe?

Ho provato facendo un banalissimo:


ClasseA a = new ClasseA;
String testo = a.jtextfield1.getTex();


ma non funziona.
Seriamente, non so proprio come posso fare, nè dove sbattere la testa. Qualcuno puo' aiutarmi? Dove sto sbagliando qualcosa?

Vi ringrazio anticipatamente. :)

PGI-Bis
08-02-2012, 19:21
I sintomi sono un po' ambigui ma a naso direi che il problema sia "a". Per "parlare" col campo di testo dell'altro frame non basta che "a" sia di tipo ClassA, deve proprio essere lo stesso "a" - cioè la stessa istanza.

Se il problema è questo la soluzione è di design ma, in generale, in tanto parti diverse di uno stesso programma o di programmi diversi possono comunicare tra loro in quanto condividano direttamente o indirettamente una regione di memoria - che può essere locale o remota.

matteo p.
09-02-2012, 10:30
Grazie per la risposta!
Effettivamente credo anch'io che il problema sia quello ...
Come potrei fare per usare la stessa istanza?

(sì, so che forse sono domande elementari, ma studiando da autodidatta non ho ben capito questa cosa)

PGI-Bis
09-02-2012, 11:03
Be', come preferisci. In verità tutto dipende da come vuoi che sia strutturato il tuo programma. Una soluzione generale è quella di usare un terzo incomodo, un'istanza condivisa dai due attori principale il cui scopo è conservare i dati o strumenti necessari agli altri due per parlarsi.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Main {

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
Main.edtMain();
}
});
}

public static void edtMain() {
Application app = new Application();
Frame001 frame001 = new Frame001(app);
Frame002 frame002 = new Frame002(app);
app.setFrame001(frame001);
app.setFrame002(frame002);
frame001.show();
frame002.show();
}
}

class Application {
private Frame001 frame001;
private Frame002 frame002;

public Frame001 getFrame001() { return frame001; }
public void setFrame001(Frame001 f) { this.frame001 = f; }
public Frame002 getFrame002() { return frame002; }
public void setFrame002(Frame002 f) { this.frame002 = f; }
}

class Frame001 {
private JTextField field = new JTextField(20);
private JFrame frame = new JFrame("Frame001");
private Application application;

Frame001(Application app) {
this.application = app;
frame.add(field, BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
field.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fieldActionPerformed();
}
});
}

public JTextField getTextField() {
return field;
}

public void fieldActionPerformed() {
String text = field.getText();
application.getFrame002().getTextField().setText(text);
}

public void show() {
frame.pack();
frame.setVisible(true);
}
}

class Frame002 {
private JTextField field = new JTextField(20);
private JFrame frame = new JFrame("Frame002");
private Application application;

Frame002(Application app) {
this.application = app;
frame.add(field, BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
field.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fieldActionPerformed();
}
});
}

public JTextField getTextField() {
return field;
}

public void fieldActionPerformed() {
String text = field.getText();
application.getFrame001().getTextField().setText(text);
}

public void show() {
frame.pack();
frame.setLocation(300, 0);
frame.setVisible(true);
}
}