我在 a 中有一个自定义渲染器来为sJTable
显示JCheckbox
es 。boolean
但是,这会导致一个小问题,因为当用户单击表格单元格而不是复选框时,复选框仍处于选中状态。
有没有办法可以返回JCheckbox
由特定点呈现的实际边界,JTable
以便确定点击是否在边界内JCheckbox
?
非常感谢。
更改复选框的状态是编辑器的责任,而不是渲染器。如果使用DefaultCellEditor
,则无需编写自己的代码。
我可能错了,但我认为这是任何类型为Boolean.class
(由 确定TableModel
)的列的默认行为。因此您不需要编写任何渲染/编辑代码,只需确保您的模型返回正确的列类型,并且该列将呈现为复选框并使用复选框进行编辑。
编辑:也许我对你的要求感到困惑。看到 Paul 对这个问题的评论后,我必须同意,如果您单击表格单元格中的任何位置,则应该切换复选框。
如果您将JCheckBox
用作从 返回的组件TableCellEditor
,那么它将被拉伸以适合或其他东西(它似乎没有被指定)。所以,显而易见的事情就是把它放在 aJPanel
中,让它被拉伸,留下如何分配空间给LayoutManager
你选择的 a 。
实际上,我今天下午刚刚做了类似的事情。
这是我的把戏,对于JTree
. 我的复选框在最右边或最右边。
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
int row = getRowForLocation(x, y);
Rectangle rect = getRowBounds(row);
Rectangle rect2 = new Rectangle(rect.x, rect.y, rect.height + 2, rect.height);
if (rect2.contains(x, y)) .... // The click is on the checkbox