• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekazywanie argumentu metodzie actionPerformed

Cloud VPS
0 głosów
185 wizyt
pytanie zadane 24 lutego 2017 w Java przez plkpiotr Stary wyjadacz (12,420 p.)

W jednej z klas w konstruktorze stworzyłem 16 przycisków przy pomocy pętli, co działa poprawnie. Jednak chciałbym dodać do każdego z nich obsługę zdarzeń... Mógłbym to zrobić oddzielnie dla każdego z nich definiując actionPerformed w klasach anonimowych lub razem korzystając z if'ów. Jednak, aby nie wydłużać niepotrzebnie kodu pomyślałem, że mógłbym wykonać to w pętli, jednak napotkałem problem przy przekazywaniu dodatkowego argumentu i:

Local variable i defined in an enclosing scope must be final or effectively final.

Kod zaś przedstawia się następująco:

public class ChooseClub extends Frame {
	
	public ChooseClub(String title) {
		super(title);
		setLayout(new FlowLayout(FlowLayout.CENTER, 128, 10));
		JButton button[] = new JButton[16];
		ImageIcon icon[] = new ImageIcon[16];
		for (int i = 0; i < 16; i++) {
			button[i] = new JButton(Main.league.get(i).getName());
			icon[i] = new ImageIcon(getClass().getResource("logos/" + Main.league.get(i).getLogo() + ".png"));
			button[i].setIcon(icon[i]);
			button[i].setVerticalTextPosition(SwingConstants.BOTTOM);
			button[i].setHorizontalTextPosition(SwingConstants.CENTER);
			button[i].addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					try {
						EditFootballer editFootballer = new EditFootballer("Beniaminek - Edycja zawodników", i);
						editFootballer.setVisible(true);
					} catch (IOException e1) {
						e1.printStackTrace();
					}
				}
			});
			add(button[i]);
		}
	}
}

Co należy zrobić, aby zmienna i była widoczna wewnątrz funkcji anonimowej? Jest możliwość przeładowania metody przy obsłudze zdarzeń?

1 odpowiedź

+1 głos
odpowiedź 24 lutego 2017 przez Mateusz51 Nałogowiec (28,180 p.)
wybrane 24 lutego 2017 przez plkpiotr
 
Najlepsza
Musiał byś sprawić aby i było niezmienne. Ale jak rozumiem to raczej jest problem.
Pammietaj że zmienna ActionEvent to nie jest tylko niepotrzebne coś. Zawsze możesz probrać źródło zdarzenia i na jego podstawie wnioskować.
komentarz 24 lutego 2017 przez plkpiotr Stary wyjadacz (12,420 p.)

Dziękuję za radę ; )
Próbowałem również na podstawie źródła zdarzenia wnioskować, jednak wtedy nierozpoznawane są przyciski z tablicy przycisków. Wobec tego, chciałbym zapytać, czy można w Javie zadeklarować tablicę we wskazanym przeze mnie miejscu?

public class ChooseClub extends Frame {
    // tutaj
    public ChooseClub(String title) {
        super(title);
        // zamiast tego miejsca
    }
}
1
komentarz 24 lutego 2017 przez Mateusz51 Nałogowiec (28,180 p.)
tak można, wrecz dziwiłem się dlaczego tego nie robisz

Podobne pytania

0 głosów
1 odpowiedź 135 wizyt
pytanie zadane 26 kwietnia 2021 w Java przez PGR Obywatel (1,360 p.)
0 głosów
1 odpowiedź 179 wizyt
pytanie zadane 18 maja 2019 w Java przez manager96 Bywalec (2,050 p.)
0 głosów
2 odpowiedzi 275 wizyt
pytanie zadane 13 lipca 2017 w Java przez Czachodym Nowicjusz (120 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...