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 이벤트를받지 못하는 이유입니까?
+1 매우 좋은 설명, 그걸위한 @ jilt3d 예제 http://stackoverflow.com/questions/7556380/sorting-jtable-causes-nullpointerexception/7557018#7557018 – mKorbel
흠, 그래서 렌더러는 ... ... 그래픽? 마우스 포인터의 좌표로 할당해야하는 것은 무엇입니까? 그 사실을 알고 흥미 롭습니다. 설명해 주셔서 감사합니다. – jilt3d
+1 관련 [Q & A] (http://stackoverflow.com/questions/7137786/how-can-i-put-a-control-in-the-jtableheader-of-a-jtable)입니다. – trashgod