禁用滚动到焦点的单元格

时间:2009-08-17 18:44:01

标签: java swing jtable jscrollpane

我在滚动窗格内有一个jtable。当部分不在视野范围内的单元格获得焦点时,如何阻止滚动窗格向上或向下滚动?

问题是当我将用户鼠标悬停在单元格上时,我将单元格设置为可编辑,因此当您将鼠标悬停在部分不可见的单元格上时,视图会突然变化。我不喜欢这种行为。关于如何改变它的任何想法?

2 个答案:

答案 0 :(得分:2)

您可以尝试在桌面上调用“setAutoscrolls(false)”。

虽然javadoc讨论了处理鼠标拖动事件,但它也应该禁用行/单元格部分的滚动。

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class TableTest extends JFrame {

    private JTable table;
    /**
     * Create a new TableTest Frame.
     * @param title The title of the frame.
     */
    public TableTest() {

        Object[][] tableData = new Object[][] {
                {1, "One"}, {2, "Two"}, {3, "Three"},
                {4, "Four"}, {5, "Five"}, {6, "Six"}};

        DefaultTableModel tableModel = new DefaultTableModel(tableData, new String[] {"A", "B"});
        table = new JTable(tableModel);
        table.setAutoscrolls(false);

        JScrollPane scrolly = new JScrollPane(table);
        setLayout(new BorderLayout());
        add(scrolly, BorderLayout.CENTER);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {

        TableTest frame = new TableTest();
        frame.pack();
        frame.setSize(200, 100);
        frame.setVisible(true);
    }
}

答案 1 :(得分:0)

花了我几个小时的搜索,但我让它为我工作。

使用JTable子类

覆盖此方法
public void scrollRectToVisible(java.awt.Rectangle aRect)
    {
       if(getAutoscrolls())
       super.scrollRectToVisible(aRect);
    }

现在table.setAutoscrolls(false)应该正常工作。