[Java] Zmienna z ActionPerformed do innej klasy (JFrame)


(Aekal4) #1

Witam. Podczas pisania programu w Eclipse, napotkałem na pewien problem.

 

W oknie znajdują się 2 pola JTextField, w które użytkownik wpisuje kwotę i czas, a po kliknięciu przycisku Oblicz, otwiera się kolejne okno, w którym muszę wykorzystać te wartości do pewnych obliczeń. Niestety nie wiem jak odczytać te zmienne (którym wartości są nadane w metodzie ActionPerformed buttona) w nowej klasie. 

Oto kod okna z przyciskiem Oblicz:

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Okno_Wprowadzanie_Danych extends JFrame implements ActionListener{
	private JButton button;
	private JLabel lKwota, lCzas; 
	private JTextField tKwota, tCzas;
	public double kwota;
	public int czas;
	
	public Okno_Wprowadzanie_Danych() {
		setTitle("Wprowadzanie danych");
		setSize(500,500);
		setResizable(false);
		setLocationRelativeTo(null);
		setLayout(null);
		
		lKwota = new JLabel("Kwota do inwestycji (zł):");
		lKwota.setBounds(50, 70, 200, 50);
		add(lKwota);
		
		tKwota = new JTextField("");
		tKwota.setBounds(250, 70, 200, 50);
		add(tKwota);
		
		lCzas = new JLabel("Na jaki czas lokata (dni):");
		lCzas.setBounds(50, 150, 200, 50);
		add(lCzas);
		
		tCzas = new JTextField("");
		tCzas.setBounds(250, 150, 200, 50);
		add(tCzas);
		
		button = new JButton("Oblicz");
		button.setBounds(150,250,200,70);
		add(button);
		button.addActionListener(this);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		kwota = Double.parseDouble(tKwota.getText());
		czas = Integer.parseInt(tCzas.getText());
		AppUser userApp = new AppUser();
		userApp.setVisible(true);
	}
	
	public double getKwota(){
		return kwota;
	}
	public int getCzas(){
		return czas;
	}
}

Próbowałem w nowej klasie czegoś takiego:

Okno_Wprowadzanie_Danych okno = new Okno_Wprowadzanie_Danych();
double zysk = okno.getKwota()*okno.getCzas();
System.out.println("Zysk wynosi "+ zysk);

Jednak wartości zmiennych są wtedy równe 0.


(Frankfurterium) #2

W klasie AppUser powinno znaleźć się coś takiego:

public class AppUser {

	private double amount;
	private int time;

	public void setAmount(double amount) {
		this.amount = amount;
	}

	public void setTime(int time) {
		this.time = time;
	}

	public double calculateProfit() {
		return amount * (double)time;
	}
}

Wtedy w metodzie actionPerformed robisz zwykłe:

kwota = Double.parseDouble(tKwota.getText());
czas = Integer.parseInt(tCzas.getText());
AppUser userApp = new AppUser();
userApp.setAmount(kwota);
userApp.setTime(czas);
userApp.setVisible(true);

I gdzieś wewnątrz dla obliczeń wywołujesz metodę calculateProfit();


(Aekal4) #3

Musiałem jeszcze trochę pokombinować i ustawić metody jako statyczne, żeby działały w klasach do JTabbedPane. Ale w końcu się udało, dzięki za pomoc.