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.
Możliwości
- Prześlij JSlidera
- Prześlij (o ile nie jest to typ podstawowy) wartość JSlidera
- Monitoruj JSlidera
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
Ja tu nie widzę przesyłania JSlidera.
Przesylam wartosci JSlidera
W jaki sposób?
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.
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.
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ł.
- Załączony kod jest błędny (niekompilowalny). Jaki masz naprawdę kod?
- Co nazywasz przesyłaniem do drugiej klasy? W zamieszczonym kodzie nie ma żadnego przesyłania.
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);
}
}
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 < ...)
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.
Nie jestem programistą, nie wiem za bardzo jak mogę się uprać z tym problemem tzn, aby przekazać tą zmienna
pokaż pełny kod tych dwóch klas, bo tu nikt nie umie wróżyć...
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.