代码之家  ›  专栏  ›  技术社区  ›  Richard

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

  •  0
  • Richard  · 技术社区  · 16 年前

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

    有没有方法可以返回 JCheckbox公司 JTable公司 在一个特定的点上,这样我就可以确定点击是否在 JCheckbox公司 ?

    3 回复  |  直到 5 年前
        1
  •  1
  •   deHaar    5 年前

    更改复选框的状态是编辑器的责任,而不是呈现器的责任。如果你使用 DefaultCellEditor ,您不需要编写自己的代码。

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

    编辑: 也许我被你的要求搞糊涂了。看到保罗对这个问题的评论后,我不得不同意这个复选框 应该 如果单击表格单元格中的任何位置,则切换。

        2
  •  0
  •   Tom Hawtin - tackline    16 年前

    如果您正在使用 JCheckBox 当组件从 TableCellEditor ,然后它将被拉伸以适合或其他情况(似乎未指定)。所以,最明显的是把它放在 JPanel ,这样就可以拉伸它,将如何分配空间给 LayoutManager 你的选择。

        3
  •  0
  •   deHaar    5 年前

    我今天下午也做了类似的事。

    这是我的诀窍,因为 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