0

ここに私の問題があります.3つのパネルを持つjpanelがあります。縦区切りパネル、チャット出力パネル、チャット入力パネル。メインの jpanel である chatpanel は、mousemotionlistener を実装しており、次のコードがあります。

 public void mouseMoved(MouseEvent e) {
   int y = e.getY();

   //change cursor look if hovering over vertical spacer
   if(y >= (int)(verticalPanelSeperator.getLocation().getY()) && y <=    (int)(verticalPanelSeperator.getLocation().getY() + verticalPanelSeperator.getHeight())) {
       setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
   }
   else {
       setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR ));
   }
}

public void mouseDragged(MouseEvent e) {
//vertical spacer can be draged up/down to change height of input/output areas
    if(getCursor().getType() == Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR).getType()) {
        int edge = (int)this.getLocation().getY();
        int cur = e.getY();
        int height = this.getHeight();
        output.setHeightPercent((((double)(cur-edge))/height));
        output.componentResized(new ComponentEvent(this, 1));
        input.setHeightPercent((((double)(height-cur-edge))/height));
        input.componentResized(new ComponentEvent(this, 2));
        e.consume();
    }
}

問題は、何らかの理由で、マウスを垂直パネルセパレーターの上に移動すると、サイズ変更カーソルに変わりますが、上に移動すると、ドラッグせずにサイズ変更カーソルのままになることです。さらに、print ステートメントから、マウスがチャット出力に上がると、e.getY() の値は増加せず、垂直セパレーターパネルの境界内にとどまります。チャット出力のデフォルトのマウスリスナーがチャットパネルのマウスリスナーをオーバーライドし、何もしていないようです。誰かがここで何が起こっているのか、これを修正する方法を教えてもらえますか?

4

1 に答える 1

1

は、他のMouseListenerコンテナがその上でマウス イベントを監視していない限り、そのコンテナのマウス イベントにのみ応答します。マウス イベントを雨粒と考えてください。雨粒との間に傘をさしておけば、雨粒は届かない。

代わりにインターフェイスからmouseEnterandを使用し、それを直接登録することをお勧めしますmouseExitMouseListenerverticalPanelSeperator

于 2013-04-03T01:25:45.767 に答える