ActionListener gra kółko i krzyżyk

0

Witam, robię grę kółko i krzyżyk, mam problem z obsługą myszy, aktualnie program powinien zwracać mi wiadomość "kliknieto" przy kliknięciu w okienku gry, jednak nic sie nie dzieje, ale kod się kompiluje. Jeżeli jest ktoś w stanie mi pomóc to będę bardzo wdzięczny.

 import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import java.awt.Color;
import java.awt.Font;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import javax.swing.JTextField;
import javax.swing.JButton;

public class Kolko_krzyzyk extends JPanel implements MouseListener, MouseMotionListener{

	/**
	 * 
	 */
	ArrayList<Point> Punkty= new ArrayList<Point>();
	private int x,y;
	
	private static final long serialVersionUID = 1L;
	private JFrame frame;
	private JTextField textField_PlayerI;
	private JTextField textField_PlayerII;
	

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try 
				{
					Kolko_krzyzyk window = new Kolko_krzyzyk();
					window.frame.setVisible(true);
				} 
				catch (Exception e) 
				{
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Kolko_krzyzyk() 
	{
		addMouseListener(this);
        addMouseMotionListener(this);
		initialize();
	}
	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.getContentPane().setBackground(Color.WHITE);
		frame.setBounds(100, 100, 650, 450);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
		
		
		JLabel label = new JLabel("");
		label.setIcon(new ImageIcon("C:\\java\\Gra\\image\\plansza.PNG"));
		label.setBounds(22, 42, 363, 333);
		frame.getContentPane().add(label);
		
		JLabel lblPlayerI = new JLabel("Player I:");
		lblPlayerI.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblPlayerI.setBounds(437, 53, 66, 20);
		frame.getContentPane().add(lblPlayerI);
		
		JLabel lblPlayerIi = new JLabel("Player II:");
		lblPlayerIi.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblPlayerIi.setBounds(437, 102, 66, 20);
		frame.getContentPane().add(lblPlayerIi);
		
		textField_PlayerI = new JTextField();
		textField_PlayerI.setFont(new Font("Tahoma", Font.BOLD, 14));
		textField_PlayerI.setBounds(513, 53, 86, 20);
		frame.getContentPane().add(textField_PlayerI);
		textField_PlayerI.setColumns(10);
		
		textField_PlayerII = new JTextField();
		textField_PlayerII.setBounds(513, 104, 86, 20);
		frame.getContentPane().add(textField_PlayerII);
		textField_PlayerII.setColumns(10);
		
		JButton btnStart = new JButton("Start");
		btnStart.setBounds(460, 290, 139, 46);
		frame.getContentPane().add(btnStart);
		
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		x=e.getX();
		y=e.getY();
		Punkty.add(new Point(x,y));
		repaint();
		JOptionPane.showMessageDialog(null, "kliknieto");
		
		System.out.println("kliknieto");
		}

	@Override
	public void mousePressed(MouseEvent e) {
		System.out.println("kliknieto");
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		System.out.println("kliknieto");
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		System.out.println("kliknieto");
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		
		
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		
		
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		
		
	}
}
0

Daj sobie (użytkownikowi) możliwość kliknięcia w panel klasy Kolko_krzyzyk - wyświetl go.

0

chodzi o ramkę (frame)?Wyświetlam ją, mógłbyś pokazać na kodzie o co chodzi?

0

Chyba wyraźnie napisałem

panel klasy Kolko_krzyzyk
. Do tego panelu dodajesz listenery, ale go nie wyświetlasz.
A przy okazji, zmień też to:

label.setIcon(new ImageIcon("C:\\java\\Gra\\image\\plansza.PNG"));

ścieżka do pliku powinna być względna.

0

Jestem początkujący, więc przepraszam za moją niewiedzę, dodałem frame.setVisible(true) ale nie działa dalej....

 
	private void initialize() {
		
		frame = new JFrame();
		frame.getContentPane().setBackground(Color.WHITE);
		frame.setBounds(100, 100, 650, 450);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);		
		frame.setVisible(true);

		
0

A dlaczego ten dopisek miałby cokolwiek zmienić, przecież już było wywołanie

window.frame.setVisible(true);
0

Dopisz do metody initialize coś takiego

        ...
        frame.getContentPane().add(btnStart);
        setBounds(0,0,5,5);
        frame.add(this); 
    }

Wtedy panel jest wyświetlany, ma rozmiar 5x5 i jak w niego klikniesz to będzie reakcja.

0

Dziękuje za pomoc :) po dodaniu tego fragmentu, kompilator zwraca błąd, nie wiem dlaczego po kropce dodawany jest w tym miejscu przycisk "add(btnStart);". Bez tego działa, z jednym ale: po pierwszym kliknięciu wszytko jest ok ale po ponownym ramka staje sie cała biała, znikają przyciski i plansza.

0

nie wiem dlaczego po kropce dodawany jest w tym miejscu przycisk "add(btnStart);"

Mnie o to pytasz? Przecież to jest fragment Twojego kodu, zacytowałem, żebyś wiedział gdzie dopisać.
A co do znikania, albo zmyślasz, albo testujesz kod inny niż zamieszczony na forum.

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