Проблема с добавлением JPanel и добавлением к нему Mouselistener - PullRequest
1 голос
/ 07 октября 2011

Я делаю простое приложение, в котором есть экран меню и экран игры. На экране меню есть кнопка перехода, и если вы щелкнете по ней мышью, экран меню переключится на экран игры, в котором есть простой игровой процесс.

Основной класс (он расширяет JFrame) управляет переключением экрана и настраивает экраны с помощью разметки карты. Он устанавливает JFrame и JPanel под названием cardpanel. Затем Cardpanel добавляет:

cardPanel.add(menu, "menuscreen");
cardPanel.add(game, "gamescreen");

Меню и игра являются ссылками на их классы (классы расширяются JPanel).

Проблема в том, что, когда я пытаюсь добавить в меню JPanel p, который зарегистрирован в слушателе мыши, при нажатии на него ничего не происходит. Я попытался добавить p непосредственно в основной класс, и это сработало, поскольку меню является видимым экраном по умолчанию, но при переключении в игровую комнату пользовательские клавиатурные вводы не работали. И когда экран игры был по умолчанию, и p был добавлен непосредственно в main, входы не работали. Поэтому мне действительно нужно добавить p на экран меню, плюс, он делает код лучше.

Благодарен за помощь и советы!

Вот код класса меню, в который я попытался добавить p: (удалил ненужный рисунок)

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;



public class Menu extends JPanel implements ActionListener, MouseListener, Commons{

    public static int points = 0;
    public int xMouse;
    public int yMouse;
    private Timer timer;
    private Image image;
    private String backMenu = "backMenu.png";
    private Go go;
    private Logo logo;
    JPanel p = new JPanel();
    public Main main;

    public Menu(Main main){
        add(p);
        this.main = main;

                timer = new Timer(5, this);
                timer.start();

                ImageIcon ii = new ImageIcon(getClass().getResource(backMenu));
        image = ii.getImage();
        go = new Go();
        logo = new Logo();
        setVisible(true);

        setFocusable(true);

        p.addMouseListener(this);
            p.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        repaint();;
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if ((e.getX() > go.getX()) && (e.getX() < go.getX()+go.getWidth())){
        if ((e.getY() > go.getY()) && (e.getY() < go.getY()+go.getHeight()))

        {
            main.changeScreen();    
        }
        }

    }
}
...