JTable调整大小表头执行自动滚动

时间:2014-04-14 14:18:13

标签: java swing

这是我的问题。我有下面的代码。它的作用是当我在面板的边缘上拖动一个列时,我的面板会自动滚动。

然而,问题是,使用此功能,每次调整列宽时,面板也会滚动到顶部。

例如,我有1000行,我突出显示底部的第999行。当我调整列宽时,面板会滚动到顶部。如何使面板留在我所在的位置?

我希望我的表格水平自动滚动,但不能垂直。

table.getTableHeader().addMouseMotionListener(new MouseMotionAdapter() {
    public void mouseDragged(MouseEvent e)
    {
        Rectangle r = new Rectangle(e.getX(), e.getY(), 1, 1);
        ((JTableHeader)e.getSource()).scrollRectToVisible(r);
        table.scrollRectToVisible(r);
    }
});

1 个答案:

答案 0 :(得分:0)

您正在通过以下声明重置JTable的滚动条位置:

table.scrollRectToVisible(r);

此处矩形的x位置是正确的,因为它与JTableHeaderJTable相同。但两者的y位置应该不同。但您也使用JTableHeader的y位置JTable

要使其正常工作,请获取JViewPort使用的JScrollPane的{​​{1}}位置。 将此y位置用于上述语句中使用的矩形。这应该可以纠正这个问题。