我的应用程序中有一个 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/