我的应用程序中有一个JTable。我在桌面上设置了一个自定义渲染器(一个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
有关更好方法的建议吗?以上是所有平台上的可靠方法吗?
答案 0 :(得分:2)
在线搜索后,我找到了以下页面:
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.
}
}
这适用于所有平台。感谢大家的意见和建议。