Wyświetlanie numeru w etykiecie J-elementu

0
class RadioButtonRysuj extends JRadioButton implements ActionListener {

	private JPanel buttonPanel;
	String godzina;
        private int nr;
	
	RadioButtonRysuj(JPanel buttonPanel, int nr) {
		this.nr = nr;
		godzina = "Godzina " + Integer.toString(nr);
		super("godzina"); //błąd
		this.buttonPanel = buttonPanel;
		addActionListener(this);
	}

        ...
}

Wywołanie konstruktora z klasy podstawowej jest podkreślone na czerwono.

Proszę o pomoc.

1

super() musi być wywołane na początku konstruktora

 RadioButtonRysuj(JPanel buttonPanel, int nr) 
{
    super();
    ...
}
0

Dzięki.

Zrobiłem to za pomocą tablicy i nie działa.

Oto kod:

public class ButtonPanel extends JPanel{

	public static final int HEIGHT = 100;
	public static final int WIDTH = 100;
	public String godzina;

	RadioButtonRysuj[] RB;

	public ButtonPanel() {
	
		setLayout(new FlowLayout());
		setLocation(0,0);
		setPreferredSize(new Dimension(WIDTH, HEIGHT));

		for (int i = 0; i<24; i++)
		{
			godzina = Integer.toString(i);
			RB[i] = new RadioButtonRysuj(this, godzina);
			add(RB[i], FlowLayout.LEFT);
		}
		
	}
}
2

Nigdzie nie tworzysz tablicy

RadioButtonRysuj[] RB = new RadioButtonRysuj[24];

Jeżeli nie zmieniłeś kodu klasy RadioButtonRysuj, to ten wiersz

RB[i] = new RadioButtonRysuj(this, godzina);

jest błędny, powinno być

RB[i] = new RadioButtonRysuj(this, i);

Dlaczego tak:

add(RB[i], FlowLayout.LEFT);

a nie tak:

add(RB[i]);
0

Bardzo dziękuję.

Dlaczego tak:

add(RB[i], FlowLayout.LEFT);

a nie tak:

add(RB[i]);

Przy drugim sposobie są wyświetlane od 1-szej do ostatniej (od góry do dołu), a przy pierwszym - od ostatniego do pierwszego.

0

FlowLayout.LEFT jest w tym miejscu bardzo mylące (i może zadziałać źle). Stała FlowLayout.LEFT jest argumentem konstruktora new FlowLayout(align) i decyduje o tym jak rozmieścić komponenty względem okna, gdy okno jest za duże. Ty korzystasz z metody add(Component, index) klasy Container i chcesz, żeby kolejny komponent był dodawany na początku. Powinieneś użyć jednego z dwóch rozwiązań:

        for (int i = 0; i<24; i++)
        {
            RB[i] = new RadioButtonRysuj(this, i);
            add(RB[i], 0);
        }

szczęśliwie dla Ciebie, aktualna wartość FlowLayout.LEFT to zero.

        for (int i = 23; i>=0; i--)
        {
            RB[i] = new RadioButtonRysuj(this, i);
            add(RB[i]);
        }

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