Originariamente inviato da massimoborreca
beh se sapevo quello che facevo di sicuro non avrei chiesto aiuto a voi...è ovvio che devo ancora imparare molte cose, e penso che anche con la pratica sia molto meglio!!!
percio dov'è che ho sbagliato? e come dovrei fare?
Te l'ho scritto. Dovevi lasciare il costruttore della classe B così com'era originalmente... solo dovevi aggiungerci il parametro e l'istruzione this.a = a;
Fine.
Poi andava modificata la parte di codice dove "mandi il testo" alla classe di partenza.
Faccio prima a postarti un esempio completo, scritto a mano, senza tutta la schifezza degli IDE (se già non l'avessi detto: abbandona l'IDE... non hai ancora sufficiente dimestichezza per capire cosa fa lui e cosa dovresti fare tu):
Classe A:
codice:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class A extends JFrame implements ActionListener {
private JLabel lblTesto;
private JButton cmdApri;
private boolean aperto;
public A() {
Container c = getContentPane();
c.setLayout( new BorderLayout() );
aperto = false;
JPanel jp = new JPanel( new BorderLayout() );
lblTesto = new JLabel("Testo scritto: ");
lblTesto.setHorizontalAlignment( JLabel.LEFT );
cmdApri = new JButton("Apri");
cmdApri.addActionListener( this );
jp.add(lblTesto, BorderLayout.CENTER);
jp.add(cmdApri, BorderLayout.EAST);
c.add(jp, BorderLayout.NORTH);
setTitle("Esempio - Finestra principale");
setSize(800, 600);
setDefaultCloseOperation( EXIT_ON_CLOSE );
setLocationRelativeTo( null );
setVisible( true );
}
public void setTesto(String str) {
lblTesto.setText("Testo scritto: " + str);
aperto = false;
}
@Override
public void actionPerformed(ActionEvent ae) {
if ( !aperto ) {
B b = new B( this );
aperto = true;
}
}
public static void main(String[] args) {
A a = new A();
}
}
Classe B:
codice:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class B extends JFrame implements ActionListener {
private JTextField txtTesto;
private JButton cmdInvia;
private A a;
public B(A a) {
this.a = a;
Container c = getContentPane();
c.setLayout( new BorderLayout() );
JPanel jp = new JPanel( new BorderLayout() );
txtTesto = new JTextField();
cmdInvia = new JButton("Invia");
cmdInvia.addActionListener( this );
jp.add(txtTesto, BorderLayout.CENTER);
jp.add(cmdInvia, BorderLayout.EAST);
c.add(jp, BorderLayout.NORTH);
setTitle("Esempio - Finestra secondaria");
setSize(300, 200);
setDefaultCloseOperation( DO_NOTHING_ON_CLOSE );
setLocationRelativeTo( null );
setVisible( true );
}
@Override
public void actionPerformed(ActionEvent ae) {
a.setTesto( txtTesto.getText() );
dispose();
}
}
Buono studio.
Ciao.