2012-01-17 3 views
4

에서의 MouseListener를 마우스 오른쪽 단추로 클릭하고 난 JTable에있는 창을 설계 JTable의 구성 요소 된 MouseEvent 리스너를 추가하고이 코드를 추가했습니다 :내가 넷빈즈를 사용하고 전체 JTable의 구성 요소

private void productsTableMousePressed(java.awt.event.MouseEvent evt) { 
    if(evt.isPopupTrigger()) { 
     tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen()); 
     tablePopupMenu.setVisible(true); 
     System.out.println("Fired!"); 
    } 
} 

private void productsTableMouseReleased(java.awt.event.MouseEvent evt) { 
    if(evt.isPopupTrigger()) { 
     tablePopupMenu.setLocation(evt.getXOnScreen(), evt.getYOnScreen()); 
     tablePopupMenu.setVisible(true); 
    } 
} 

을하지만 경우에만 작동 I 일부 세포를 클릭하십시오. 전체 JTable 영역에서 작업하고 싶습니다. 방법?

답변

2

테이블이 JScrollPane의 내부에있는 가정, 그것은 전체 뷰포트를 포함하지 않을 수 있습니다

아니면 더 좋은 방법은 사용하는 것입니다. 뷰포트의 전체 영역을 커버하려면 테이블에 setFillsViewportHeight(true)으로 전화하십시오.

+0

예, 맞습니다. 그건 제 문제였습니다. 나는 몇 분 전에 그것을 알아 냈습니다. 하지만, JScrollPane에서 mousePressed를 트리거 해 해결했기 때문에이 메서드를 사용해 주셔서 감사합니다.하지만 솔루션이 좋게 들립니다. –

+0

+1, 좋은 추측. – camickr

+0

많은 사람들이 JScrollPane과 올바르게 상호 작용하는 법을 알지 못합니다. 나는 나보다 더 고민하고있다. – jackrabbit

3

하지만 일부 셀을 클릭 할 때 만 작동하지만, 내가 그것을

의 MouseListener 모든 세포에서 작동합니다 전체 JTable의 영역에서 작업을 진행하고자합니다. 당신이 setLocation (...) 메소드를 사용해야하는지 나는 모른다.

예제 코드는 Bringing Up a Popup Menu을 참조하십시오.

table.setComponentPopupMenu(...); 
+1

+1은 componentPopupMenu를위한 것입니다. - 그게 할 수있는 방법입니다 :-) 자습서는 오래된 것입니다 ... – kleopatra

0

내 JTable (JInternalFrame에 중첩 된 JScrollPane에 있음)에서 JTable이 JScrollPane보다 클 때 스크롤 및 크기 조정에 문제가 있음을 발견했습니다.

기본적으로 프레임이 왼쪽 모니터에 있지만 테이블을 오른쪽으로 스크롤하면 오른쪽 모니터에 팝업이 나타납니다.

프레임과 스크롤 창 모두에 대해 getMousePositions()과 마우스 이벤트 getX 및 getXOnScreen()의 네 가지 옵션의 결과를 검토했습니다.

내게 원하는 결과를 주었던 유일한 프레임은 getMousePositions()뿐입니다. 그 밖의 모든 것은 그것이 내게 맞는 세계관에 대한 내부 견해에 의해 상쇄되었습니다.

그래서 내가 말하는 것은 마우스 좌표를 잡아낼 때주의해야합니다.

관련 문제