Java JTable Scroll selectRow(int row, JTable table, JScrollPane pane)

Here you can find the source of selectRow(int row, JTable table, JScrollPane pane)

Description

Selects a the specified row in the specified JTable and scrolls the specified JScrollpane to the newly selected row.

License

Apache License

Parameter

Parameter Description
table should belong to the specified JScrollPane

Declaration

public static void selectRow(int row, JTable table, JScrollPane pane) 

Method Source Code

//package com.java2s;
/*//from  w w w  .  j  a va  2  s  . com
 * Copyright 1999-2005 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import javax.swing.*;
import javax.swing.table.TableModel;
import java.awt.*;

public class Main {
    /**
     * Selects a the specified row in the specified JTable and scrolls
     * the specified JScrollpane to the newly selected row. More importantly,
     * the call to repaint() delayed long enough to have the table
     * properly paint the newly selected row which may be offscre
     * @param table should belong to the specified JScrollPane
     */
    public static void selectRow(int row, JTable table, JScrollPane pane) {
        if (table == null || pane == null) {
            return;
        }
        if (contains(row, table.getModel()) == false) {
            return;
        }
        moveAdjustable(row * table.getRowHeight(),
                pane.getVerticalScrollBar());
        selectRow(row, table.getSelectionModel());
        // repaint must be done later because moveAdjustable
        // posts requests to the swing thread which must execute before
        // the repaint logic gets executed.
        repaintLater(table);
    }

    protected static void selectRow(int row, ListSelectionModel model) {
        if (model == null) {
            return;
        }
        model.setSelectionInterval(row, row);
    }

    protected static boolean contains(int row, TableModel model) {
        if (model == null) {
            return false;
        }
        if (row < 0) {
            return false;
        }
        if (row >= model.getRowCount()) {
            return false;
        }
        return true;
    }

    protected static void moveAdjustable(int location, Adjustable scrollBar) {
        if (scrollBar == null) {
            return;
        }
        scrollBar.setValue(location);
    }

    /**
     * Work around for JTable/viewport bug.
     * @link http://developer.java.sun.com/developer/bugParade/bugs/4205145.html
     */
    protected static void repaintLater(final JComponent component) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                component.repaint();
            }
        });
    }
}

Related

  1. scrollToVisible(JTable table, int rowIndex, int vColIndex)
  2. scrollToVisible(JTable table, int rowIndex, int vColIndex)
  3. scrollToVisible(JTable table, int rowIndex, int vColIndex)
  4. selectAndScroll(JTable table, int rowIndex)
  5. selectAndScrollToPosition(JTable table, int index0, int index1)
  6. selectRow(JTable table, int row, boolean bScroll)
  7. showMessageDialogInScrollableUneditableTextArea( java.awt.Component owner, String text, String title, int messageType, final int maxPreferredWidth, final int maxPreferredHeight)
  8. tableCenterScroll(JPanel panel, JTable table, int row)
  9. updateScrollMode(JScrollPane scroll, JTable table)