Пишу игру на 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){
}
}
}