ComboBox-odczyt danych

0

Staram się napisać minikalulator składający się z dwóch klas ComboBox i Calculation, moim celem jest przekazanie wartości wybranego Stringa z Comboboxu do klasy Calculation, wykonanie na nim np szeregu obliczeń, po czym przeniesieniu wyniku obliczeń do pola JField "fieldOutput2". Za pierwszym razem, gdy wybieram wartość z Comboboxu, wszystko działa poprawnie, natomiast przy ponownej zmianie wartości w Comboboxie, wartość "value1" w klasie "Calculation" nie aktualizuje się. Proszę o pomoc w rozwiązaniu problemu.

  1. ComboBox
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class ComboBox extends JFrame implements ActionListener
{
	static JComboBox comboNumber;
	JLabel labelOutput1;
	static JTextField fieldOutput1;
	
	JLabel labelOutput2;
	JTextField fieldOutput2;
	
	static double helpValue1;
		
	public ComboBox()
	{
		setTitle("ComboBox");
		setSize(300,300);
		setLayout(null);
		setLocationRelativeTo(null);	
		setResizable(false);
		
		comboNumber= new JComboBox(new String[] {"20", "30", "40"});
		comboNumber.setBounds(50, 50, 100, 20);
		comboNumber.setEditable(true);
		add(comboNumber);
		comboNumber.addActionListener(this);
		
		fieldOutput1=new JTextField("");
		fieldOutput1.setBounds(100,100,50,20);
		add(fieldOutput1);
		
		fieldOutput2=new JTextField();
		fieldOutput2.setBounds(100,150,50,20);
		add(fieldOutput2);
		
		labelOutput1=new JLabel("Output1:");
		labelOutput1.setBounds(50,100,200,20);
		labelOutput1.setForeground(new Color(200,200,200));
		labelOutput1.setFont(new Font("SansSerif", Font.BOLD, 12));
		add(labelOutput1);
		
		labelOutput2=new JLabel("Output2:");
		labelOutput2.setBounds(50,150,200,20);
		labelOutput2.setForeground(new Color(200,200,200));
		labelOutput2.setFont(new Font("SansSerif", Font.BOLD, 12));
		add(labelOutput2);
	}
	
	public static String getSelectedItem() 
		{
	       return (String)comboNumber.getSelectedItem();
	    }
	
	
	public static void main (String[] args)
	{
		ComboBox cb = new ComboBox();
		cb.setVisible(true);
		cb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public void actionPerformed(ActionEvent e)
	{
		Object źródło= e.getSource();		
		if (źródło==comboNumber)
			{
			fieldOutput1.setText((String) comboNumber.getSelectedItem());
			helpValue1=Double.parseDouble(fieldOutput1.getText());
			//double helpValue2=helpValue1*2;
			fieldOutput2.setText(String.valueOf(Calculation.method1()));
			System.out.println("helpValue: " + String.valueOf(helpValue1));
			System.out.println("getSelectedItem: " + getSelectedItem());
			System.out.println("Calculation.value1: " + Calculation.value1);
			System.out.println("Calculation.method1(): " + String.valueOf(Calculation.method1()));
			}
	}
}

2.Calculation

public class Calculation
{
	static double value1=ComboBox.helpValue1;
	//static double value1=Double.parseDouble(ComboBox.getSelectedItem());
	
	static double method1()
	{
		double value2=2*value1;
		return value2;
	}

}
0

zmień w metodzie method1 klasy Calculation to

double value2=2*value1;

na

double value2=2*ComboBox.helpValue1;
0

Dzieki za wskazowke, moglbys mi jeszce wytlumaczyc dlaczego stala value1 nie aktualizuje sie?

0

Bo jej nie aktualizujesz.
Główną przyczyną tego jest to, że korzystasz z pól static. Na początku sugerowałbym zrezygnować ze "static".

Dlaczego Twój kod nie działa?
Masz ustawione pole static w klasie Calculation. Jest ono ustawiane w momencie, kiedy skorzystasz z klasy. Czyli pierwsze ustawienie odbywa się w momencie wybrania wartości w combobox. Potem go już nie aktualizujesz i pozostaje cały czas ta sama wartość(z momentu załadowania klasy).

0

Dzieki bardzo za wytlumaczenie, pozdrawiam

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