JRadioButton, isSelected, problem

0

Witam,

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class Testy extends JFrame{
	
	boolean tmp_plec;
	JRadioButton radio_m, radio_k;

	public static void main(String args[]){
		new Testy();
	}
	
	public Testy(){
		super("Symulacja Life");

		Obszar Radio = new Obszar();
		Ustawienia.add(Radio);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setResizable(false);

		JRadioButton radio_m = new JRadioButton("Mężczyzna");
		radio_m.addActionListener(new wybierz_plec());
		Radio.add(radio_m);

		JRadioButton radio_k = new JRadioButton("Kobieta");
		radio_k.addActionListener(new wybierz_plec());
		Radio.add(radio_k);

		ButtonGroup grupa_radio = new ButtonGroup();
		grupa_radio.add(radio_m);
		grupa_radio.add(radio_k);
		
		setVisible(true);
	}

	class wybierz_plec implements ActionListener{
		public void actionPerformed(ActionEvent e){
			if(radio_m.isSelected()){
				tmp_plec = true;
			}else if(radio_k.isSelected()){
				tmp_plec = false;
			}
		}
	}
	
	
}

Oto fragment kodu mojego programu (pousuwałem raczej nic nie wnoszące fragmenty, żeby oszczędzić miejsca). Problem jest związany z określaniem, który JRadioButton jest zaznaczony.

Najchętniej pobierałbym to do zmiennej typu boolean. Co ciekawe program kompiluje się bez błędów. Natomiast po jego uruchomieniu i klikaniu w te JRadioButton na konsoli pojawia się cała seria nic nie mówiących mi wyjątków. Do zmiennych oczywiście nie zapisują się dane tak jak powinny.

Dzięki z góry za pomoc. Pozdrawiam.

0

Błędne są te dwa wiersze:

                JRadioButton radio_m = new JRadioButton("Mężczyzna");
                .........
                JRadioButton radio_k = new JRadioButton("Kobieta");

powinno być tak:

                radio_m = new JRadioButton("Mężczyzna");
                .........
                radio_k = new JRadioButton("Kobieta");

wpierw zadeklarowałeś pola w klasie o nazwach radio_m i radio_k, a potem w konstruktorze zadeklarowałeś zmienne lokalne o takich samych nazwach, w efekcie pola mają wartość null, a klasa wybierz_plec korzysta z pól klasy a nie ze zmiennych lokalmych
btw. tobie może wyjątki nic nie mówią, ale nam tak, w przyszłości podawaj nazwę wyjątku i zaznaczaj wiersz w kodzie, w którym wyjątek wystąpił

0

Dzięki bogdans. Ratujesz mnie :)

Faktycznie, teraz program działa. Myślałem, że nie ma różnicy pomiędzy tymi definiowaniami. Czyli powinno się zawsze tworzyć obiekty w sposób: nazwa_obiektu = new nazwa_klasy(); ? W każdym razie jeszcze raz dzięki.

Ok, będę wrzucał na przyszłość wyjątki. Pozdrawiam.

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