1

我在 a 中有一个自定义渲染器来为sJTable显示JCheckboxes 。boolean但是,这会导致一个小问题,因为当用户单击表格单元格而不是复选框时,复选框仍处于选中状态。

有没有办法可以返回JCheckbox由特定点呈现的实际边界,JTable以便确定点击是否在边界内JCheckbox

非常感谢。

4

3 回答 3

1

更改复选框的状态是编辑器的责任,而不是渲染器。如果使用DefaultCellEditor,则无需编写自己的代码。

我可能错了,但我认为这是任何类型为Boolean.class(由 确定TableModel)的列的默认行为。因此您不需要编写任何渲染/编辑代码,只需确保您的模型返回正确的列类型,并且该列将呈现为复选框并使用复选框进行编辑。

编辑:也许我对你的要求感到困惑。看到 Paul 对这个问题的评论后,我必须同意,如果您单击表格单元格中的任何位置,则应该切换复选框。

于 2008-12-02T15:29:53.793 回答
1

如果您将JCheckBox用作从 返回的组件TableCellEditor,那么它将被拉伸以适合或其他东西(它似乎没有被指定)。所以,显而易见的事情就是把它放在 aJPanel中,让它被拉伸,留下如何分配空间给LayoutManager你选择的 a 。

于 2008-12-02T19:10:48.450 回答
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
于 2008-12-02T15:38:52.060 回答