我正在用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){
}
}
}