• 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

VPS Starter Arubacloud
0 głosów
165 wizyt
pytanie zadane 17 lutego 2017 w Java przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 17 lutego 2017 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 2017 przez Mateusz51 Nałogowiec (28,180 p.)
wybrane 17 lutego 2017 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 2017 przez plkpiotr Stary wyjadacz (12,420 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
1 odpowiedź 208 wizyt
pytanie zadane 26 listopada 2018 w PHP przez niezalogowany
0 głosów
0 odpowiedzi 98 wizyt
pytanie zadane 19 września 2016 w JavaScript przez redstar1 Bywalec (2,200 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...