przekazanie wartości do ActionListener-a

0

Pisze program i mam mały problem i chce jak na załączonym przykładzie operować zmienna b w ActionLisner jednak tam już ta wartość nie przechodzi staje się "0.0", w pierwszym System.out.println(b) jest dobra wartość w czym tkwi problem ?

public Waluty() {

          final Float b = new Float(usd);
          System.out.println(b);

                      ActionListener walutaActionListener = new ActionListener() {
	              public void actionPerformed(ActionEvent actionEvent) {
                             System.out.println(b);
}};
}
0

Pewnie w klasie Waluty masz pole o nazwie b, ActionListener korzysta z tego pola, a nie ze zmiennej lokalnej utworzonej w konstruktorze.

0

niestety nie mam, zmieniłem nazwy na bardziej treściwe i dalej nic program nie zgłasza mi żadnego błędu tylko po prostu nie przenosi tej wartości do Lisnera może niewłaściwe jest coś z tym "final" ?

0

Poprawka program wygląda tak

public class Waluty extends JFrame
{
float flo_b;
public Waluty() {
          final Float flo_b = new Float(usd);
          System.out.println(flo_b);
 
                      ActionListener walutaActionListener = new ActionListener() {
                      public void actionPerformed(ActionEvent actionEvent) {
                             System.out.println(flo_b);
}};
}

wtedy program nie zgłasza błędów ale nie przekazuje wartości usunąłem początkowy float flo_b; i jest błąd :Waluty.java cannot find symbol. Czyli w Lisnerze już nie widzi flo_b choć jest final hmm jestem skołowany ....o.0

0

To jest w ogóle dziwna konstrukcja. Tworzysz lokalny obiekt a chcesz go wepchnąć do actionListenera

0
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

public class Test2 extends JFrame {
	float flo_b;

	public Test2() {
		final Float flo_b = new Float(3.2);
		System.out.println(flo_b);

		ActionListener walutaActionListener = new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				System.out.println(flo_b);

			}};

	}
}

coś o 1 za mało klamerke masz na końcu reszta wyglada OK.
tylko pytanie, w konstruktorze tworzysz obiekt klasy anonimowej i przeciez nigdzie dalej nie masz możliwośći jego wywołania poza tym konstruktorem to skąd wiesz co sie dzieje wewnątrz actionPerformed ?

takie cos mi działa bez problemow:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

public class Test2 extends JFrame {
	float flo_b;

	public Test2() {
		final Float flo_b = new Float(3.2);
		System.out.println(flo_b);

		ActionListener walutaActionListener = new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				System.out.println(flo_b);

			}};
			
			walutaActionListener.actionPerformed(null);

	}
	
	public static void main(String[] args) {
	    new Test2();
    }
	
	
}
0

już znalazłem błąd aż wstyd się przyznać -.-
kursy walut wczytywałem z pliku txt a później podstawiałem je do zmiennych np do zmiennej flo_b to podstawianie robiłem w try{ jak zrobiłem poza już było ok :D
następnym razem 30 razy poczytam kod ..
Dzięki za naprowadzenie ;) faktycznie u was wszystko działało tylko u mnie było zamieszane;p
Pozdrawiam

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