如何使Scroll窗格静态?

时间:2011-09-26 06:47:57

标签: java swing jtable

观察::

每当用户到达表格中的最后一个单元格并按Tab键时,焦点就会转移到第一个单元格,即表格顶部。

通过使用函数 table.scrollRectToVisible(rect)将表格视图带回到最后一个单元格,但是由于这种情况,存在移动并且看起来表格值中存在错误更改。

场景::如果我将make Scroll窗格设置为静态在特定位置,以便我可以控制移动。怎么能让这成为可能......

提前谢谢你......

1 个答案:

答案 0 :(得分:4)

基本方法是将表的默认导航操作包装到自定义Action中,该Action检查当前单元格:如果它是最后一个,则不执行任何操作,否则执行包装操作

代码示例:

    Object key = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
        .get(KeyStroke.getKeyStroke("ENTER"));
    final Action action = table.getActionMap().get(key);
    Action custom = new AbstractAction("wrap") {

        @Override
        public void actionPerformed(ActionEvent e) {
            // implement your prevention logic
            // here: don't perform if the current cell focus is the very cell of the table
            int row = table.getSelectionModel().getLeadSelectionIndex();
            if (row == table.getRowCount() - 1) {
                int column = table.getColumnModel().getSelectionModel().getLeadSelectionIndex();
                if (column == table.getColumnCount() -1) {
                    // if so, do nothing and return
                    return;
                }
            }
            // if not, call the original action
            action.actionPerformed(e);
        }

    };
    table.getActionMap().put(key, custom);