在JTable中单击表头是不会自动选中列的,也没有接口可以直接在JTable中获取到表头的点击事件,只能通过监听JTableHeader的鼠标事件来做出响应。
JTableHeader tableHeader = table.getTableHeader();
tableHeader.setPreferredSize(new Dimension(tableHeader.getWidth(), 35));
tableHeader.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
int choose = tableHeader.columnAtPoint(e.getPoint());
System.out.println("========="+choose);
table.addColumnSelectionInterval(choose, choose);
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
实现效果如下:
但是这样选中后不能取消选中的状态,那么再做个取消选中的判断。
private int[] chooses;
chooses= new int[columnTitle.length];
for(int choose : chooses) {
chooses[choose] = -1;
}
JTableHeader tableHeader = table.getTableHeader();
tableHeader.setPreferredSize(new Dimension(tableHeader.getWidth(), 35));
tableHeader.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
int pick = tableHeader.columnAtPoint(e.getPoint());
if(chooses[choose] == -1 || chooses[choose] == 0) {
chooses[choose] = 1;
table.addColumnSelectionInterval(choose, choose);
} else {
chooses[choose] = -1;
table.removeColumnSelectionInterval(choose, choose);
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
});
搞定。