• 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
35 wizyt
pytanie zadane 17 lutego w Java przez Zaćwilichowski Stary wyjadacz (10,700 p.)
edycja 17 lutego przez Zaćwilichowski

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 Stary wyjadacz (11,520 p.)
wybrane 17 lutego przez Zaćwilichowski
 
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 Zaćwilichowski Stary wyjadacz (10,700 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 57 wizyt
0 głosów
1 odpowiedź 24 wizyt
...