Przekazanie zmiennej pomiędzy klasami

0

Witam.
Proszę o pomoc w przekazaniu wartości zmiennej pomiędzy dwoma klasami.
Przedstawiłem dość prosty kod programu który działa następująco:
Z pierwszej klasy uruchamiam metode startAtmos() drugiej klasy, w ktorej zmieniam wartość zmiennej v.Następnie za pomocą setera przekazuje z powrotem zmienioną wartość v do klasy bazowej Main.
Co ciekawe w seterze wartość jest prawidlowa ale dalej w actionPerformed juz niestety nie.Potrzebuję wartość ustawioną w drugiej klasie "Second" do części nasłuchu: actionPerformed
Proszę o pomoc...

public class Main implements ActionListener {
	JButton b;
	private int v=7;
	Second obiektSecond;
	
	public static void main(String args[]) 
		Main obiekt = new Main();
		obiekt.gui();
	}
	
	public void gui(){
		JFrame frame = new JFrame();
		frame.setBounds(100,100,200,200);
		frame.setLayout(null);
		
		b = new JButton();
		b.setBounds(50,50,50,50);
		b.setVisible(true);
		b.addActionListener(this);
		frame.add(b);
		
		frame.setVisible(true);
		v=8;
		obiektSecond = new Second();
		obiektSecond.startAtmos();
	}
	
	
	public void setVariable(int p){ //ODEBRANIE WARTOŚCI
		this.v = p;
		System.out.println("setter: " + v); //tutaj jest OK
	}
	
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == b){
		System.out.println("action" + v); //tutaj juz nie :-(
		metoda();
		}
	}
	
	public void metoda(){
		System.out.println("metoda" + v); // no i tu tez nie :(
	}
}

//-----------------------------------------------------------------

public class Second extends JPanel {
	public int v=2;
	Main obiektMain;
	
	public void startAtmos() {
		v = 50; //ZMIANA WARTOŚCI
		obiektMain = new Main();
		obiektMain.setVariable(v); //Wysłanie zmiennej
	}
}
0

Wysyłasz wartość zmiennej do innego obiektu klasy Main (nie tego pierwotnie utworzonego)

     obiektMain = new Main();
     obiektMain.setVariable(v); //Wysłanie zmiennej
0

No tak - rzeczywiscie, czyli rozumeim że trzeba przekazać referencje gdzieś w tej drugiej klasie...

0

Np. tak

obiektSecond = new Second(this);

a w klasie Second

    .....
    Main main;
    public Second(Main main)
    {
        this.main=main;
    }
    ......
    main.setVariable(v);
    
0

Jeszcze takie pytanko..
Jeżeli w Main mam do przekazania jeszcze np dwie albo więcej zmiennych...

Main {
public int v1=5;
public int v2=25;
...

To powinienem je przekazywać zawsze w argumentach funkcji czy robić to w ten sposob:

class Display{
...
public setMain(Main main) {
        this.main=main;
        this.v1 = v1;
        this.v2 = v2;
}
0

W ten sposób

class Display{
...
public setMain(Main main) {
        this.main=main;
        this.v1 = v1;
        this.v2 = v2;
}

nigdy, w tym kodzie w ogóle nie ma przekazania wartości (v1 po prawej stronie operatora przypisania jest polem v1 z klasy Display), ewentualnie tak:

   ....
   this.v1=main.v1;
   ....

przy założeniu, że v1 jest polem w klasie Main.
Jeśli v1 jest polem w klasie Main, to w klasie Display możesz używać składni main.v1 - możesz w ogóle nie tworzyć pola v1 w klasie Display. Rozwiązanie to jest niedobre jeśli w klasie Display chcesz zmienić wartość v1, a nie chcesz by zmieniła się wartość pola v1 w klasie Main.

1 użytkowników online, w tym zalogowanych: 0, gości: 1