如何返回JTable中的实际单元组件边界?

时间:2008-12-02 15:25:37

标签: java swing jtable

我在JTable中有一个自定义渲染器来显示布尔值的Jcheckbox。但是,这会导致一个小问题,因为当用户单击表格单元格而不是复选框时,仍然会选中该复选框。

有没有办法可以返回JTable在特定点呈现的实际JCheckbox的边界,这样我就能确定点击是否在JCheckbox的范围内?

非常感谢。

3 个答案:

答案 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分配空间。