jil*_*t3d 2 java events swing header 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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我单击"Pin Button"时,不会出现消息对话框,只会进行排序.请注意,相应的JTable实例使用setAutoCreateRowSorter(true);. 这可能是按钮没有收到任何mousePressed事件的原因吗?
请注意,相应的JTable实例使用setAutoCreateRowSorter(true).这可能是按钮没有收到任何mousePressed事件的原因吗?
那不是问题.
渲染器不是真正的组件.它只是一个组件的绘画,因此它无法接收事件.
如果要处理mouseEvents,则需要将MouseListener添加到表头.然后,您需要将鼠标指针转换为相应的表标题列,然后进行处理.
| 归档时间: |
|
| 查看次数: |
3484 次 |
| 最近记录: |