2

我正在用java编写游戏。这里的问题是我编写了我的游戏以在 JFrame 中运行,没想到我会想要添加菜单和结果屏幕以及所有这些好东西。游戏本身在 JFrame 中运行良好。不过,我决定将我的 JFrame 变成 JPanel,为我的 JFrame 创建一个单独的类,然后将我的 JPanel 添加到框架中。除了我的 MouseListener 不再做任何该死的事情外,一切都很顺利。有人可以告诉我如何使这项工作或如何做到这一点的不同想法吗?

/////更新所以显然我在重新创建问题时找到了答案......我只需要弄清楚我的游戏代码和测试代码之间的区别。

这是我写的尝试重现问题的示例。奇怪的是,这很有效。现在我更加困惑了。所以显然这没问题:

//Class for the JFrame
package mousetest;

import java.awt.Color;
import javax.swing.JFrame;

public class MouseTest extends JFrame{

public static void main(String[] args) {
    MouseTest test = new MouseTest();
}

public MouseTest(){
    //create teh board
    Board game = new Board();

    //framestuff
    setSize(406, 630);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    setVisible(true);
    setBackground(Color.black);
    add(game); // add it
}

}

==================================================== =======================

//Class for the JPanel that my game is in
package mousetest;

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Board extends JPanel{
    JLabel testlabel = new JLabel("testtext");
    //CONSTRUCTOR
    public Board(){
        setBackground(Color.WHITE);
        testlabel.addMouseListener(new Mousehandle());
        setVisible(true);
        add(testlabel);
    }


    // control ALLTHECLICKS!!!!!
    class Mousehandle implements MouseListener{

        public Mousehandle(){

        }

        public void mouseClicked(MouseEvent e) {

        }

        public void mousePressed(MouseEvent e) {
            if(e.getSource() == testlabel){
                System.out.println("mouse down");
            }
        }

        public void mouseReleased(MouseEvent e) {
            if(e.getSource() == testlabel){
                System.out.println("mouse up");
            }
        }

        public void mouseEntered(MouseEvent e) {
            if(e.getSource() == testlabel){
                System.out.println("rollover");
            }

        }

        public void mouseExited(MouseEvent e) {
           if(e.getSource() == testlabel){
                System.out.println("roll off");
            }
        }

        public void mouseDragged(MouseEvent e){

        }

    }


}
4

0 回答 0