在JTable单元格中,如何正确处理多个超链接?

时间:2011-08-12 16:48:03

标签: java swing jtable

关于如何在swing和JTable中使用超链接,网上有很多讨论,例如: HyperLink in JTable Cell

上述方法存在问题,因为它只知道鼠标所在的单元格,而不是它所在的文本,这意味着:

  1. 无法处理同一单元格中的多个超链接;
  2. 无法直观显示鼠标光标。只要鼠标位于具有超链接的单元格中,即使鼠标指向某些普通文本甚至是空白区域,鼠标也会变为手形。
  3. 另一种方法是在单元格中显示JEditorPane,但也存在问题,因为JTable只使用单元格渲染器返回的JComponent来绘制,我不认为该对象将被发送任何事件。因为默认渲染器会为每个单元重用该组件,所以让它处理任何事件都没有任何意义。

    所以我想知道实现上述效果的最佳方法是什么。

1 个答案:

答案 0 :(得分:3)

  

另一种方法是在单元格中显示JEditorPane,但也存在问题,因为JTable只使用单元格渲染器返回的JComponent来绘制,我不认为该对象将被发送任何事件。

每次细胞获得焦点时,尝试将细胞置于编辑模式。然后编辑器应该显示一个真正的组件,它应该重新启动所有事件。类似的东西:

JTable table = new JTable(...)
{
    //  Place cell in edit mode when it 'gains focus'

    public void changeSelection(int row, int column, boolean toggle, boolean extend)
    {
        super.changeSelection(row, column, toggle, extend);

        if (editCellAt(row, column))
        {
            Component editor = getEditorComponent();
            editor.requestFocusInWindow();
        }
    }
};

我会自定义代码以仅编辑特定列的单元格。