2017-04-02 1 views
1

私の質問が馬鹿に聞こえる場合は、私は残念ですが、私はまだJavaの新しいです。他のものの下にmouselistenerを追加するにはどうすればいいですか?

public class Window extends JFrame{ 


    private static final long serialVersionUID = -2139430787087799923L; 

    private TransparentJPanel mousepanel; 

    public Window(int width, int height, String title, Game game) { 
     super(title); 
     HandlerClass handler = new HandlerClass(); 
     mousepanel = new TransparentJPanel(); 
     mousepanel.addMouseListener(handler); 

     setPreferredSize(new Dimension(width,height)); 
     setMaximumSize(new Dimension(width,height)); 
     setMinimumSize(new Dimension(width,height)); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setResizable(false); 

     setVisible(true); 
     add(game);  <-- here I add the game 
     add(mousepanel); <-- here I add the panel with the mouselistener 
     game.start(); 
    } 
} 

TransparentJPanelクラス:私はあなたのコードのこのビットつもりショーだ

private class TransparentJPanel extends JPanel { 
    private static final long serialVersionUID = 8855609189172945035L; 

    TransparentJPanel() { 
     super() ; 
     this.setOpaque(false) ; 
     this.setLayout(null) ; 
    } 
} 

私は最初のゲームを追加するとき、ゲームが現れ、マウスリスナーが動作しませんが、しかし、最初にjpanelを追加すると、ゲームは表示されませんが、mouselistenerは機能します。

private class HandlerClass implements MouseListener { 
    public void mouseClicked(MouseEvent event) { 
     System.out.println(String.format("Clicked at %d,%d", event.getX(), event.getY())); 
    } 

    public void mouseEntered(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     System.out.println("Mouse Entered frame at X: " + x + " - Y: " + y); 

    } 
    public void mouseExited(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     System.out.println("Mouse Exited frame at X: " + x + " - Y: " + y); 

    } 
    public void mousePressed(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     System.out.println("Mouse Pressed frame at X: " + x + " - Y: " + y); 

    } 

    public void mouseReleased(MouseEvent e) { 
     int x = e.getX(); 
     int y = e.getY(); 
     System.out.println("Mouse Released at X: " + x + " - Y: " + y); 

    } 

} 

だから、それは私の問題だ: はここに私のhandlerClassのクラスです。 助けてください。

+0

は 'Game'のJPanelクラスですか? –

+0

いいえ。ゲームはゲームループなどのRunnableクラスです。Game.javaの完全なコードは次のとおりです。https://pastebin.com/cpsMSMxY –

+0

'JFrame'はデフォルトで' BorderLayout'を使用しています。利用可能な5つの位置のうちの1つに一度に表示される。パネルを分離する必要がある理由はありますか?ゲームパネルを 'MouseListener'として動作させる方が論理的ではないでしょうか? – MadProgrammer

答えて

0

解決策は簡単であることが判明しました!

代わりにマウスリスナーのためのパネルを作成するのではなく、あなたが

public Window(int width, int title, String title, Game game) { 
    super(title); 
    HandlerClass handler = new HandlerClass(); 

    setPreferredSize(new Dimension(width,height)); 
    setMaximumSize(new Dimension(width,height)); 
    setMinimumSize(new Dimension(width,height)); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setResizable(false); 

    setVisible(true); 
    add(game, BorderLayout.CENTER); 
    game.addMouseListener(handler);  
    game.start(); 
} 

を次のようすなわち、ゲームオブジェクトにするMouseListenerを追加することができますが、この情報がお役に立てば幸い!

+0

答えをありがとうが、それでも動作しません。私はそれを起動すると、灰色の画面だけが表示されますが、mouselistenerが動作します。私がそれらを切り替えると、ゲームが表示されましたが、マウスがフレームに入ったことがコンソールでわかったので、マウスリスト作成者は最初はほんの数秒しか働きませんでした。 –

+0

その場合は、ゲームキャンバスをJPanelにラップし、両方のパネル(ゲームパネルとマウスパネル)をフレームに追加することをお勧めします。 –

+0

ラッピングではどういう意味ですか?説明できますか? imkinnda new –

関連する問題