我在JTable中有一个自定义渲染器来显示布尔值的Jcheckbox。但是,这会导致一个小问题,因为当用户单击表格单元格而不是复选框时,仍然会选中该复选框。
有没有办法可以返回JTable在特定点呈现的实际JCheckbox的边界,这样我就能确定点击是否在JCheckbox的范围内?
非常感谢。
答案 0 :(得分:1)
更改复选框的状态是编辑器的责任,而不是渲染器。如果您使用DefaultCellEditor,则无需编写自己的代码。
我可能错了,但我认为这是任何具有Boolean.class类型的列的默认行为(由TableModel确定)。因此,您不需要编写任何渲染/编辑代码,只需确保您的模型返回正确的列类型,该列将呈现为复选框并使用复选框进行编辑。
编辑:也许我对你的要求感到困惑。看过Paul对这个问题的评论,我必须同意,如果你点击表格单元格中的任何地方,应该切换。
答案 1 :(得分:0)
我实际上今天下午做了类似的事情。
对于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
答案 2 :(得分:0)
如果您使用JCheckBox
作为从TableCellEditor
返回的组件,那么它将被拉伸到适合或其他东西(似乎没有指定)。所以,显而易见的事情就是把它放在JPanel
中,让它被拉伸,留下如何为你选择的LayoutManager
分配空间。