Przekazanie zmiennej pomiędzy klasami

Odpowiedz Nowy wątek
2007-11-27 02:09
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
    }
}

Pozostało 580 znaków

2007-11-27 08:39
bogdans
0

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

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

Pozostało 580 znaków

2007-11-27 10:49
0

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


Pozostało 580 znaków

2007-11-27 11:45
bogdans
0

Np. tak

obiektSecond = new Second(this);

a w klasie Second

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

Pozostało 580 znaków

2007-11-28 03:25
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;
}

Pozostało 580 znaków

2007-11-28 08:00
bogdans
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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