2011-12-17 2 views
1

예를 들어 항목 목록이나 구성 요소 격자가 있고 어떤 종류의 호버/롤오버 메커니즘을 구현한다고 가정 해 보겠습니다. 이렇게하는 쉬운 방법은 모든 구성 요소에 MouseListener를 추가하고 mouseEnteredmouseExited 메서드를 사용하는 것입니다. 당신이 할 수있는 또 다른 방법은 마우스의 위치를 ​​기반으로 컴포넌트를 결정하는 것입니다. 예를 들어 JLabel의 2D 배열이 있고 포인터 아래에있는 레이블을 다음과 같이 결정할 수 있습니다. Java : 많은 양의 MouseListener가 픽셀/격자 분할과 어떻게 비교됩니까?

private void setRolloverIndices(Point p){ 
    this.rolloverRow = p.y/this.labelHeight; 
    this.rolloverCol = p.x/this.labelWidth; 
} 

private JLabel getRolloverLabel(){ 
    // assume safe values 
    return labels[rolloverRow][rolloverCol]; 
} 

그것은 가치가 픽셀/그리드 계산으로 괴롭 히고, 또는 청취자는 일반적으로 많은 구성 요소를 처리 할 수있을만큼 효율적입니까?

답변

4

동일한 수신기를 여러 구성 요소에 추가 할 수 있으며 이벤트를 트리거하는 구성 요소는 이벤트 getSource() 또는 getComponent() 메서드를 사용하여 사용할 수 있습니다. 포인트 위치를 기반으로 추측 할 필요가 없습니다.

+0

동일한 수신기를 여러 구성 요소에 추가 할 수 있다는 사실을 알고 있습니다. 하지만 여러 구성 요소에서 수많은 이벤트 (예 : 여러 마우스/키/포커스 수신기)를 청취하는 리스너가 있다고 가정 해 봅시다. 계산을 사용할 수 있다면 훨씬 더 효율적일까요? 나는 내 질문에 얼마나 효율적인 청취자가 일반적으로 비슷한 지 짐작한다. – rtheunissen

+0

리스너는 이벤트가 발생할 때 메서드가 호출되는 객체입니다. 효율성은이 방법에서 무엇을하는지에 따라 다릅니다. 청취자 1 명 또는 복수의 청취자는, 지정된 메소드의 실행에 걸리는 시간을 변경하지 않습니다. 그들은 모두 고유 한 스레드에서 순차적으로 호출됩니다. –

관련 문제