2013-04-03 3 views
0

여기 내 문제가 있습니다 : 나는 그것에 세 패널을 가지고있는 jpanel 있습니다. 세로 분리기 패널, chatouput 패널 및 chatinput 패널. 주요 JPanel의, chatpanel는 모든 MouseMotionListener를 구현, 다음과 같은 코드가 있습니다jtextarea 마우스 이벤트가 컨테이너 마우스 이벤트를 오버라이드

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(); 
    } 
} 

문제가 당신이 verticalpanelseperator 위에 마우스를 이동할 때 어떤 이유로, 그것은 크기 조정 커서로 변경한다는 것입니다,하지만 당신은 이동 그것을 드래그하지 않고, 크기 조정 커서로 유지합니다. 또한 print 문에서 마우스가 chat 출력으로 올라갈 때 e.getY()의 값이 증가하지 않고 verticalseperatorpanel의 범위 내에있게됩니다. chatoutel의 기본 mouselistener가 chatpanel의 우선 순위를 무시하고 아무것도하지 않는 것과 같습니다. 누군가가 여기에 무슨 일이 일어나고 어떻게 해결할 수 있는지 말해 줄 수 있습니까?

답변

1

MouseListener은 다른 컨테이너가 그 위의 마우스 이벤트를 모니터링하지 않는 한 컨테이너에 대한 마우스 이벤트에만 응답합니다. 마우스 이벤트를 비 방울로 생각하십시오. 우산을 비와 비 사이에 올려 놓으면 비가 내리지 않습니다.

내가 대신 MouseListener 인터페이스에서 mouseEntermouseExit을 사용하고 verticalPanelSeperator

에 직접 등록해야 좋을 것

관련 문제