Java 如何检测对JTable行边界的点击?
我的应用程序中有一个JTable。我在表上有一个自定义的渲染器设置(一个JTextArea,启用换行),它允许多行内容。在某些情况下,JTable单元格的内容可能会溢出单元格的边界。我想做以下工作: 我希望用户能够双击行边框,而不是让用户拖动行边框来调整单元格的大小,因此当我检测到这种情况时,我可以自动调整单元格的高度(行的高度),以显示单元格的全部内容 我的问题是,检测双击行边界的最佳方法是什么?我通过在JTable上设置一个MouseListener,并使用mouseClicked方法实现了这一点,该方法如下所示:Java 如何检测对JTable行边界的点击?,java,swing,jtable,Java,Swing,Jtable,我的应用程序中有一个JTable。我在表上有一个自定义的渲染器设置(一个JTextArea,启用换行),它允许多行内容。在某些情况下,JTable单元格的内容可能会溢出单元格的边界。我想做以下工作: 我希望用户能够双击行边框,而不是让用户拖动行边框来调整单元格的大小,因此当我检测到这种情况时,我可以自动调整单元格的高度(行的高度),以显示单元格的全部内容 我的问题是,检测双击行边界的最佳方法是什么?我通过在JTable上设置一个MouseListener,并使用mouseClicked方法实现了
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
有什么更好的方法可以做到这一点的建议吗?上述方法在所有平台上都可靠吗?在网上搜索后,我找到了以下页面: 除此之外,它还指定了鼠标光标在不同情况下的行为。根据“指针反馈”部分,光标在N_RESIZE_光标和S_RESIZE_光标之间切换,具体取决于它是悬停在其上的组件的上边界还是下边界。有趣的是,在三分之二的平台(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.
}
}
这将适用于所有平台。谢谢大家的投入和评论。有什么可以替代的吗?@trashgood,不太确定这会有什么帮助。我已经找到了“将行大小调整为正确大小”的部分。我真正感兴趣的是,我检查用户是否点击了单元格边界(鼠标悬停在行边界上时,会显示调整大小的光标)的技术是否正确/可靠。当光标悬停在行边界上时,是否可以预期所有平台上的光标都是cursor.N_RESIZE_光标?javadoc没有给出其他指示,但我需要确认;我认为@camickr的例子是一个潜在的替代方案。Re
Cursor.N\u RESIZE\u Cursor
,我想你可以发布一个帖子,让人们报告他们的发现。