Warunek naciśnięcia przycisku i odwołanie do innej klasy.

0

Hej!
Chciałbym w klasie głównej zamieścić warunek, który będzie polegał na tym, że po wciśnięciu przycisku w menu wywołana będzie dalsza część aplikacji.
Zamieszczam tylko część kodu, żeby nie śmiecić.
W klasie głównej Gra:

		public void game() {
			new RamkaMenu();             //Wywołanie okna menu
		
			PrzyciskStart przyciskStart = new PrzyciskStart();
			
			if (przyciskStart.actionPerformed=true) {               //Tutaj nie wiem, co powinno być w nawiasie
			

kod do wywołania
		}

klasa przycisku:

import java.awt.Color;
import java.awt.event.*;
import java.util.Random;

import javax.swing.*;

class PrzyciskStart extends JButton implements ActionListener {

	private JPanel buttonPanel;
	private Color[] colors = { Color.GREEN, Color.BLUE, Color.RED };

	PrzyciskStart(JPanel buttonPanel) {
		super("start");
		this.buttonPanel = buttonPanel;
		addActionListener(this);
	}

	public PrzyciskStart() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		                                                              
		return;                                                     //tak może być?
	}
}

Wiem, obiektowość się kłania...

0

Jeszcze pomyślałem, że zrobię coś takiego:
Przeniosłem warunek do:

	public static void main(String[] args) {
			while (new RamkaMenu() != null) { 
			Gra inv = new Gra();
			inv. game();
			}
		}

gdzie:

import javax.swing.*;

public class RamkaMenu extends JFrame {

	public RamkaMenu() {
		super("Menu główne gry Arkanoid Invaders");

		JPanel panelMenu = new PanelMenu();
		add(panelMenu);

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);
	}
}
import java.awt.*;

import javax.swing.JButton;
import javax.swing.JPanel;

public class PanelMenu extends JPanel{

	public static final int HEIGHT = 100;
	public static final int WIDTH = 300;

	private JButton przyciskStart;
	private JButton przyciskKoniec;


	public PanelMenu() {
		przyciskStart = new PrzyciskStart(this);
		przyciskKoniec = new PrzyciskKoniec(this);
	

		setLayout(new FlowLayout());
		setPreferredSize(new Dimension(WIDTH, HEIGHT));
		add(przyciskStart);
		add(przyciskKoniec);
		
	}
}

I klasa PrzyciskStart bez zmian.

Niestety, dalej otwierają mi się dwa okna- okno z grą/aplikacją, a wciśnięcie przycisku START nic nie robi.

Jeszcze nie wiem co zrobić, żeby wciśnięcie przycisku START zamykało okno, w którym jest.

0

Udało mi się osiągnąć tyle, że po wciśnięciu przycisku start uruchamia się okno z grą, jednak traci ona wtedy interaktywność. Nie można nawet zamknąć okna gry, ani nie odpowiadają przyciski zamknięcia okna oraz przycisk koniec w oknie menu.

W klasie głównej, prócz pozostałych wywoływań jest tak:

public static void main(String[] args) {
			new RamkaMenu();
		
		}

A w klasie przycisku zamieściłem wywołanie klasy odpowiadającej za uruchomienie gry, której kod główny mieści się w klasie Gra (tej samej, w której jest to, co wyżej):

import java.awt.Color;
import java.awt.event.*;
import java.util.Random;

import javax.swing.*;

class PrzyciskStart extends JButton implements ActionListener {

	private JPanel buttonPanel;
	private Color[] colors = { Color.GREEN, Color.BLUE, Color.RED };

	PrzyciskStart(JPanel buttonPanel) {
		super("start");
		this.buttonPanel = buttonPanel;
		addActionListener(this);
	}


	@Override
	public void actionPerformed(ActionEvent e) {
		Gra inv = new Gra();
		inv. game();
		return;       //ewentualnie do zmiany
	}
}
0

Musiałem się douczyć i wykorzystać wielowątkowość. Zastosowałem anonimową klasę wewnętrzną:

import java.awt.Color;
import java.awt.event.*;
import java.util.Random;

import javax.swing.*;

class PrzyciskStart extends JButton implements ActionListener {

	private JPanel buttonPanel;
	private Color[] colors = { Color.GREEN, Color.BLUE, Color.RED };

	PrzyciskStart(JPanel buttonPanel) {
		super("start");
		this.buttonPanel = buttonPanel;
		addActionListener(this);
	}


	@Override
	public void actionPerformed(ActionEvent e) {
		new Thread(new Runnable() {          //Anonimowa klasa wewnętrzna
			public void run() {
				Gra inv = new Gra();
				inv.game();
			}}).start();
	}
}

I działa.

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