2011-09-30 5 views
2

JTable 인스턴스가 사용하는 커스텀 헤더 셀 렌더러를 구현했습니다.커스텀 JTable 헤더 셀 렌더러의 컴퍼넌트에 마우스 청취자를 추가하는 방법

private final class TableHeaderCellRenderer extends DefaultTableCellRenderer { 
    private static final long serialVersionUID = 6288512805541476242L; 

    public TableHeaderCellRenderer() { 
     setHorizontalAlignment(CENTER); 
     setHorizontalTextPosition(LEFT); 
     setVerticalAlignment(BOTTOM); 
     setOpaque(false); 
    } 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     setIcon(getIcon(table, column)); 

     JPanel headerContainer = new JPanel(); 
     headerContainer.setLayout(new BorderLayout()); 
     headerContainer.setBorder(UIManager.getBorder("TableHeader.cellBorder")); 

     Box buttonBox = Box.createHorizontalBox(); 

     JButton pinButton = new JButton(); 
     pinButton.setOpaque(false); 
     pinButton.setMaximumSize(new Dimension(16, 16)); 
     pinButton.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mousePressed(MouseEvent e) { 
       JOptionPane.showMessageDialog(null, "ASD"); 
      } 
     }); 

     buttonBox.add(pinButton); 

     headerContainer.add(this, BorderLayout.CENTER); 
     headerContainer.add(buttonBox, BorderLayout.EAST); 

     return headerContainer; 
    } 
} 

"핀 단추"를 클릭하면 정렬이 발생하지 않고 메시지 대화 상자가 나타나지 않습니다. 각 JTable 인스턴스는 setAutoCreateRowSorter (true);를 사용합니다. 이것이 왜 mousePressed 이벤트를받지 못하는 이유입니까?

답변

6

각각의 JTable 인스턴스는 setAutoCreateRowSorter (true)를 사용합니다. 이것이 왜 mousePressed 이벤트를받지 못하는 이유입니까?

이는 문제가되지 않습니다.

렌더러는 실제 구성 요소가 아닙니다. 구성 요소의 그림 일 뿐이므로 이벤트를 수신 할 수 없습니다.

mouseEvents를 처리하려면 MouseListener를 테이블 헤더에 추가해야합니다. 그런 다음 마우스 포인터를 해당 테이블 머리글 열로 변환 한 다음 처리해야합니다.

+0

+1 매우 좋은 설명, 그걸위한 @ jilt3d 예제 http://stackoverflow.com/questions/7556380/sorting-jtable-causes-nullpointerexception/7557018#7557018 – mKorbel

+0

흠, 그래서 렌더러는 ... ... 그래픽? 마우스 포인터의 좌표로 할당해야하는 것은 무엇입니까? 그 사실을 알고 흥미 롭습니다. 설명해 주셔서 감사합니다. – jilt3d

+0

+1 관련 [Q & A] (http://stackoverflow.com/questions/7137786/how-can-i-put-a-control-in-the-jtableheader-of-a-jtable)입니다. – trashgod

관련 문제