awt - Checkbox - sprawdzanie pola wyboru - getState()

0

Cześć, Java nie jest moją mocną stroną. Mam problem, gdyż nie wiem jak sprawdzić w funkcji oblicz() czy pole Checkboxa jest zaznaczone. getState() nie działa.
Dodam, że obliczenia na razie nie mają większego sensu, gdyż dopiero testuję działanie.
Chodzi o linijkę 126. Wrzucam kod:

/**
 * 
 */
package dzielo;

import java.awt.*;
import java.awt.event.*;


/**
 * @author Piotrek
 *
 */
public class Dzielo extends Frame implements WindowListener, ActionListener, ItemListener{
	Label imie, nazwisko, ilosc_przepracowanych_godzin, stawka_godzinowa, koszt_uzyskania_przychodu;
	Label wysokosc_placy_brutto, wysokosc_podatku, wysokosc_placy_netto, wynik1, wynik2, wynik3;
	TextField toPole1, toPole2, toPole3, toPole4;
	Button toOblicz, toKoniec;
	CheckboxGroup grupa;
	Checkbox dwadziescia_procent, piecdziesiat_procent;
	
	/**
	 * 
	 */
	public Dzielo() {
		// TODO Auto-generated constructor stub
		super("Dzielo");
		this.setSize(900, 750);
		setVisible(true);
		
		repaint();
		
		this.addWindowListener(this);
		this.setLayout(null);
		
		imie = new Label("Imie:");
		imie.setBounds(120, 100, 180, 30);
		add(imie);
		
		toPole1 = new TextField();	
		toPole1.setBounds(300, 100, 180, 30);	
		add(toPole1);
		
		nazwisko = new Label("Nazwisko:");
		nazwisko.setBounds(120, 150, 180, 30);
		add(nazwisko);
		
		toPole2 = new TextField();
		toPole2.setBounds(300, 150, 180, 30);
		add(toPole2);
		
		ilosc_przepracowanych_godzin = new Label("Ilosc przepracowanych godzin:");
		ilosc_przepracowanych_godzin.setBounds(120, 200, 180, 30);
		add(ilosc_przepracowanych_godzin);
		
		toPole3 = new TextField();
		toPole3.setBounds(300, 200, 180, 30);
		add(toPole3);
		
		stawka_godzinowa = new Label("Stawka godzinowa:");
		stawka_godzinowa.setBounds(120, 250, 180, 30);
		add(stawka_godzinowa);
		
		toPole4 = new TextField();
		toPole4.setBounds(300, 250, 180, 30);
		add(toPole4);
		
		koszt_uzyskania_przychodu = new Label("Koszt uzyskania przychodu:");
		koszt_uzyskania_przychodu.setBounds(120, 300, 180, 30);
		add(koszt_uzyskania_przychodu);
		
		CheckboxGroup grupa = new CheckboxGroup();
		
		Checkbox dwadziescia_procent = new Checkbox("20%", grupa, true);
		dwadziescia_procent.setBounds(300, 300, 50, 30);
		add(dwadziescia_procent);
		
		Checkbox piecdziesiat_procent = new Checkbox("50%", grupa, false);
		piecdziesiat_procent.setBounds(350, 300, 50, 30);
		add(piecdziesiat_procent);
	
		wysokosc_placy_brutto = new Label("Wysokosc placy brutto:");
		wysokosc_placy_brutto.setBounds(120, 350, 180, 30);
		add(wysokosc_placy_brutto);
		
		wynik1 = new Label("wynik1");
		wynik1.setBounds(300, 350, 180, 30);
		add(wynik1);
		
		wysokosc_podatku = new Label("Wysokosc podatku:");
		wysokosc_podatku.setBounds(120, 400, 180, 30);
		add(wysokosc_podatku);
		
		wynik2 = new Label("wynik2");
		wynik2.setBounds(300, 400, 180, 30);
		add(wynik2);
		
		wysokosc_placy_netto = new Label("Wysokosc placy netto:");
		wysokosc_placy_netto.setBounds(120, 450, 180, 30);
		add(wysokosc_placy_netto);
		
		wynik3 = new Label("wynik3");
		wynik3.setBounds(300, 450, 180, 30);
		add(wynik3);
	
		toOblicz = new Button("Oblicz");
		add(toOblicz);
		toOblicz.setBounds(500, 500, 60, 40);
		
		toKoniec = new Button("Koniec");
		add(toKoniec);
		toKoniec.setBounds(500, 550, 60, 40);
		toKoniec.setSize(60, 40);
		
		toOblicz.addActionListener(this);
		toKoniec.addActionListener(this);
		dwadziescia_procent.addItemListener(this);
		piecdziesiat_procent.addItemListener(this);
	}
	
	public void oblicz() {
		double liczba1, liczba2, iloczyn;
		
		liczba1 = Double.parseDouble(toPole3.getText());
		liczba2 = Double.parseDouble(toPole4.getText());
		
		if (dwadziescia_procent.getState())
			iloczyn = liczba1 * liczba2 * 2;
		else 
			iloczyn = liczba1 * liczba2;
		
		wynik1.setText(String.valueOf(iloczyn));
	}
	
	public void actionPerformed(ActionEvent e) {
		if ((Button)e.getSource() == toOblicz)
		{
			oblicz();
		}
		if((Button)e.getSource() == toKoniec)
		{
			System.exit(0);
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Dzielo();
	}
	
	public void windowActivated(WindowEvent e) {
	}
	public void windowClosed(WindowEvent e) {	
	}
	public void windowClosing(WindowEvent e) {
		System.exit(0);	
	}
	public void windowDeactivated(WindowEvent e) {
	}
	public void windowDeiconified(WindowEvent e) {
	}
	public void windowIconified(WindowEvent e) {
	}
	public void windowOpened(WindowEvent e) {
	}
	
	public void itemStateChanged(ItemEvent e) {
	}

	
}

Błędy jakie mi wywala to:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at dzielo.Dzielo.oblicz(Dzielo.java:127)
	at dzielo.Dzielo.actionPerformed(Dzielo.java:138)
	at java.awt.Button.processActionEvent(Unknown Source)
	at java.awt.Button.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
1

Masz na początku klasy serie deklaracji widgetów.

Potem w konstruktorze inicjujesz je ALE pod nowe deklaracje, jako zmienne lokalne. Te ogólniejsze są null, niezainicjowane.
Metoda oblicz powołuje się na niezainicjowany, itp itp, null pointer exception

Każdą lokalną deklarację w konstruktorze skasuj, wtedy będziesz tworzył do pól klasy o tych samych nazwach.

BTW zdziwony jestem tak długim kodem Swing pisanym ręcznie.
IDE np Netbeans prowadzi design formatki w sposób klikany

PS. Oducz się słowa "nie działa", podawaj istotę problemu, opis. Te zwrot nie jest między programistami akceptowany.

1

Tak jak kolega napisał, niepotrzebne nazwy typów przez grupa i dwoma checkboxami ;)

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