Wątek przeniesiony 2014-12-30 12:36 z Java przez bogdans.

Przekazywanie zmiennej i obliczenia w czasie rzeczywistym

0

W jaki sposob moge przekazac innej klasie moje wartosci z wybierane przez uzytkownika na JSliderze tak aby zmiana byla na biezaco aktualizowana i brana do obliczen w innej klasie? Zwykle przekazanie sprawia, ze program ciagle widzi ja jako null i nie chce ruszyc z miejsca.

0

Możliwości

  1. Prześlij JSlidera
  2. Prześlij (o ile nie jest to typ podstawowy) wartość JSlidera
  3. Monitoruj JSlidera
0

Przesyłam JSlidera


 public int getValue() {
        return zmienna;
    }

    public static void createAndShowGui(List<Double> scoresX, List<Double> scoresY) {
        JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 20);
        slider.setMinorTickSpacing(5);
        slider.setMajorTickSpacing(10);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);
        slider.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent event) {
                int value = slider.getValue();
                zmienna = value;

I jesli wyswietlam wartosc w tej klasie to jest ona taka jaka ustawi uzytkownik, natomiast w drugiej klasie ciagle jest nullem

0

Ja tu nie widzę przesyłania JSlidera.

0

Przesylam wartosci JSlidera

0

W jaki sposób?

0

W którym miejscu to robisz? Zmienna slider zadeklarowana tu:

JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 20);

i zmienna slider użyta tu:

int value = slider.getValue();

to są dwie różne zmienne. Druga z nich jest zapewne nullem.</del>
Dobry kod umieściłaś na forum? Przecież on jest niekompilowalny - zmienna slider musi byc final.

0

Przypisuje do value = zmienna, value pobieram z JSlidera .getValue(), zmienna zmienna jest globalna i w klasie w ktorej zadeklarowany jest JSlidera wypisuje ja normalnie na ekran, natomist jesli przesylam ja do drugiej klasy to wtedy jest nullem.

0

Na podstawie informacji, które nam dawkujesz, wnioskuję że do tej klasy nie przekazujesz ani przez konstruktor ani przez akcesora slidera i myślisz, że slider, którego tworzysz w metodzie to ten sam slider w klasie anonimowej. Tak jak @bogdans napisał wyżej to dwie różne zmienne.(pewnie jeszcze masz w innej klasie slidera o którego Ci chodzi:)) Dodatkowo, gdybyś nie miał w klasie zmiennej slider to bez atrybutu final kod by się nie kompilował.

0
  1. Załączony kod jest błędny (niekompilowalny). Jaki masz naprawdę kod?
  2. Co nazywasz przesyłaniem do drugiej klasy? W zamieszczonym kodzie nie ma żadnego przesyłania.
0

Poddaje się, masz przykład:

import javax.swing.*;
import javax.swing.event.*;

public class Second extends JFrame
{
    First first = null;
    public Second(First f)
    {
        this.first = f;
        final JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 20);
        slider.setMinorTickSpacing(5);
        slider.setMajorTickSpacing(10);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);
        slider.addChangeListener(new ChangeListener() 
        {
            public void stateChanged(ChangeEvent event) 
            {
                first.info.setText(""+slider.getValue());
            }
        });  
        add(slider);        
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
}

import javax.swing.*;

public class First extends JFrame
{
    public JTextField info = new JTextField(12);
    public static void main(String[] arga)
    {
        new First();
    }
    public First()
    {
        info.setEditable(false);
        add(info);
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        new Second(this).setVisible(true);
        setVisible(true);
    }
}
0

Klasa 1:

public int getValue() {
        return zmienna;
    }
 public static void createAndShowGui(....){
(...)

slider.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent event) {
                int value = slider.getValue();
                zmienna = value;
(...)

Klasa 2:

GraphPanel malyGraph= new GraphPanel();
        int zmienna= malyGraph.getValue();
        

while( i + zmienna < ...)
0

To

GraphPanel malyGraph= new GraphPanel();
int zmienna= malyGraph.getValue();

są dwie kolejne instrukcje w Klasie 1? Niezależnie od tego, czy to są kolejne instrukcje, czy nie, Ty nie odbierasz informacji o aktualnym stanie slidera. Odczytujesz ją raz - w nieznanym momencie.
Jeszcze jeden taki post i wątek ląduje w koszu.

0

Nie jestem programistą, nie wiem za bardzo jak mogę się uprać z tym problemem tzn, aby przekazać tą zmienna

0

pokaż pełny kod tych dwóch klas, bo tu nikt nie umie wróżyć...

0

Przecież dostałaś przykład kodu zawierającego dwie klasy First i Second, w klasie Second jest slider, który na bieżąco zmienia wartość zmiennej w klasie First.

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