我的应用程序中有一个 JTable。我在 table 上有一个自定义渲染器设置(一个 JTextArea,启用了换行),它允许多行内容。在某些情况下,JTable 单元格的内容预计会溢出单元格的边界。我想做以下事情:

我希望用户能够双击行边框,而不是让用户拖动行边框来调整单元格的大小,所以当我检测到这一点时,我可以自动调整单元格的高度(行的高度)显示单元格的全部内容。

我的问题是,检测双击行边框的最佳方法是什么?我通过使用如下所示的 mouseClicked 方法在 JTable 上设置 MouseListener 来实现此目的:

public class MouseButtonInputListener extends MouseInputAdapter
{
    private JTable fTable;

    public MouseButtonInputListener(JTable parentTable)
    {
       fTable = parentTable;
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {

        // Some pre-processing here...

        if(e.getClickCount() == 2 &&
           fTable.getCursor().getType() == Cursor.N_RESIZE_CURSOR)
        {
            // Auto-adjust row height to fit contents...
        }

    }
}

虽然这行得通,但我对这条线不太满意:
fTable.getCursor().getType() == Cursor.N_RESIZE_CURSOR

关于更好的方法的任何建议?以上是所有平台上的可靠方法吗?

最佳答案

在网上搜索了一些之后,我找到了以下页面:

http://java.sun.com/products/jlf/ed2/book/HIG.Behavior.html

除其他外,它指定了不同情况下的鼠标光标行为。根据“指针反馈”一节,光标在 N_RESIZE_CURSOR 和 S_RESIZE_CURSOR 之间切换,具体取决于它是悬停在组件上的上边界还是下边界。有趣的是,在 3 个平台中的 2 个平台(Mac 和 Windows)上,这些游标完全相同。无论如何,因此我的代码应该阅读:

@Override
public void mouseClicked(MouseEvent e)
{
    // Some pre-processing here. Determine row at mouse click location
    int cursorType = fTable.getCursor().getType();
    if(e.getClickCount == 2 &&
      (cursorType == Cursor.N_RESIZE_CURSOR || cursorType == CURSOR.S_RESIZE_CURSOR))
    {
        // Resize row appropriately.
    }
}

这将适用于所有平台。感谢大家的投入和评论。

关于java - 如何检测 JTable 行边界上的点击?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9143315/

10-12 22:33