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

Niedziałająca obsługa zdarzeń podczas naciskania przycisku

0 głosów
41 wizyt
pytanie zadane 17 lutego w Java przez plkpiotr Stary wyjadacz (12,300 p.)
edycja 17 lutego przez plkpiotr

Piszę kod do pierwszej aplikacji okienkowej w Javie z użyciem AWT i Swing pod środowiskiem Eclipse Neon 2.
Napisałem klasę Main uruchamiającą program, abstrakcyjną klasę Window służącą jako baza dla okien, które będą pojawiać się w programie, oraz klasę Menu, dziedziczącą po wspomnianej Window. Okno Menu ma sześć przycisków, jednak chcąc obsłużyć zdarzenie, poprzez kliknięcie na przycisk "Wyjście z gry" aby zamknąć okno nic się nie dzieje...
Pamiętam o umieszczeniu metody addActionListener(this) oraz zaimplementowaniu ActionListener, pozbywałem się również dziedziczenia przy konstruowaniu okien, jednak nic to nie zmieniło.

Być może mój zamysł programu jest nie odpowiedni, bo oczekuję, że po naciśnięciu poszczególnych przycisków będzie można przejść do nowego okna, otworzyć JFileChooser'a itp... Może niepotrzebnie łączę elementy AWT i Swing lub umieściłem metodę obsługi zdarzeń w nieodpowiednim miejscu bądź użyłem złego dostępu pól składowych, bo jedyne ostrzeżenie jakie widzę to: The value of the field (...) is not used, przy deklaracji JButton'ów.
Kod wraz z zaznaczeniem istotnych wg mnie linii umieszczam poniżej oraz proszę uprzejmie o pomoc ; )
 

public class Main {
	public static void main(String[] args) {
		Menu menu = new Menu("Beniaminek - Menu główne");
		menu.setVisible(true);
	}
}
import javax.swing.JFrame;

abstract public class Window extends JFrame {
	public Window(String title) {
		super(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(1280, 720);
		setResizable(false);
		setLocation(10, 10);
	}
}
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingConstants;

final public class Menu extends Window implements ActionListener {
	private JButton btnCup;
	private JButton btnMatch;
	private JButton btnPenalties;
	private JButton btnTeam;
	private JButton btnFootballer;
	private JButton btnImport;
	private JButton btnSave;
	private JButton btnExit;

	public Menu(String title) {
		super(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(1280, 720);
		setResizable(false);
		setLocation(10, 10);
		setLayout(new FlowLayout(FlowLayout.CENTER, 128, 64));

		JButton btnCup = new JButton("Rozgrywki pucharowe");
		Image imgCup = null;
		try {
			imgCup = ImageIO.read(getClass().getResource("buttons/cup.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		btnCup.setIcon(new ImageIcon(imgCup));
		btnCup.setVerticalTextPosition(SwingConstants.BOTTOM);
		btnCup.setHorizontalTextPosition(SwingConstants.CENTER);
		add(btnCup);

		JButton btnMatch = new JButton("Mecz towarzyski");
		Image imgMatch = null;
		try {
			imgMatch = ImageIO.read(getClass().getResource("buttons/match.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		btnMatch.setIcon(new ImageIcon(imgMatch));
		btnMatch.setVerticalTextPosition(SwingConstants.BOTTOM);
		btnMatch.setHorizontalTextPosition(SwingConstants.CENTER);
		add(btnMatch);

		JButton btnPenalties = new JButton("Seria rzutów karnych");
		Image imgPenalties = null;
		try {
			imgPenalties = ImageIO.read(getClass().getResource("buttons/penalties.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		btnPenalties.setIcon(new ImageIcon(imgPenalties));
		btnPenalties.setVerticalTextPosition(SwingConstants.BOTTOM);
		btnPenalties.setHorizontalTextPosition(SwingConstants.CENTER);
		add(btnPenalties);
		
		JButton btnTeam = new JButton("Zarządzanie drużynami");
		Image imgTeam = null;
		try {
			imgTeam = ImageIO.read(getClass().getResource("buttons/team.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		btnTeam.setIcon(new ImageIcon(imgTeam));
		btnTeam.setVerticalTextPosition(SwingConstants.BOTTOM);
		btnTeam.setHorizontalTextPosition(SwingConstants.CENTER);
		add(btnTeam);

		JButton btnFootballer = new JButton("Edycja zawodników");
		Image imgFootballer = null;
		try {
			imgFootballer = ImageIO.read(getClass().getResource("buttons/footballer.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		btnFootballer.setIcon(new ImageIcon(imgFootballer));
		btnFootballer.setVerticalTextPosition(SwingConstants.BOTTOM);
		btnFootballer.setHorizontalTextPosition(SwingConstants.CENTER);
		add(btnFootballer);

		JButton btnImport = new JButton("Wczytywanie składów");
		Image imgImport = null;
		try {
			imgImport = ImageIO.read(getClass().getResource("buttons/book.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		btnImport.setIcon(new ImageIcon(imgImport));
		btnImport.setVerticalTextPosition(SwingConstants.BOTTOM);
		btnImport.setHorizontalTextPosition(SwingConstants.CENTER);
		add(btnImport);

		JButton btnSave = new JButton("Zapisywanie składów");
		Image imgSave = null;
		try {
			imgSave = ImageIO.read(getClass().getResource("buttons/save.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		btnSave.setIcon(new ImageIcon(imgSave));
		btnSave.setVerticalTextPosition(SwingConstants.BOTTOM);
		btnSave.setHorizontalTextPosition(SwingConstants.CENTER);
		add(btnSave);

		JButton btnExit = new JButton("Wyjście z gry");
		Image imgExit = null;
		try {
			imgExit = ImageIO.read(getClass().getResource("buttons/exit.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		btnExit.setIcon(new ImageIcon(imgExit));
		btnExit.setVerticalTextPosition(SwingConstants.BOTTOM);
		btnExit.setHorizontalTextPosition(SwingConstants.CENTER);
		add(btnExit);
		btnExit.addActionListener(this);
	}

	public void actionPerformed(ActionEvent evt) {
		JButton source = (JButton) evt.getSource();
		if (source == btnExit)
			dispose();
	}
}

1 odpowiedź

+1 głos
odpowiedź 17 lutego przez Mateusz51 Pasjonat (16,540 p.)
wybrane 17 lutego przez plkpiotr
 
Najlepsza
JButton btnExit = new JButton("Wyjście z gry");

Tworzysz nową zmienną btnExit która jest widoczna tylko lokalnie w konstruktorze. W skrócie przesłaniasz zmienną instancyjną zmienną lokalną i przezto btnExit w obiekcie cały czas jest nullem.
komentarz 17 lutego przez plkpiotr Stary wyjadacz (12,300 p.)

Istotnie, pozbycie się ponownego deklarowania pomogło : )

btnExit = new JButton("Wyjście z gry");

Serdecznie dziękuję, jednak ostrzeżenia w IDE były uzasadnione ; )

Podobne pytania

0 głosów
0 odpowiedzi 59 wizyt
0 głosów
1 odpowiedź 26 wizyt

39,848 zapytań

78,315 odpowiedzi

153,993 komentarzy

18,852 pasjonatów

Przeglądających: 284
Pasjonatów: 34 Gości: 250

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...