This program shows you how to select some rows in the `JTable` programmatically. Below we demonstrate how to select rows using the `setRowSelectionInterval()` method, remove or clear row selection using `removeRowSelectionInterval()` method and use the `addRowSelectionInterval()` to add more rows to the previously selected rows.
“`java
package org.kodejava.swing;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.*;
public class JTableRowSelectProgrammatically extends JPanel {
public JTableRowSelectProgrammatically() {
initializePanel();
}
public static void showFrame() {
JPanel panel = new JTableRowSelectProgrammatically();
panel.setOpaque(true);
JFrame frame = new JFrame("JTable Row Selection");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(JTableRowSelectProgrammatically::showFrame);
}
private void initializePanel() {
setLayout(new BorderLayout());
setPreferredSize(new Dimension(500, 500));
final JTable table = new JTable(new MyTableModel());
table.setFillsViewportHeight(true);
JScrollPane pane = new JScrollPane(table);
JLabel label1 = new JLabel("From row: ");
final JTextField field1 = new JTextField(3);
JLabel label2 = new JLabel("To row: ");
final JTextField field2 = new JTextField(3);
JButton select = new JButton("Select");
JButton clear = new JButton("Clear");
JButton add = new JButton("Add another one");
// Enables row selection mode and disable column selection
// mode.
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(false);
// Select rows based on the input.
select.addActionListener(event -> {
int index1 = 0;
int index2 = 0;
try {
index1 = Integer.parseInt(field1.getText());
index2 = Integer.parseInt(field2.getText());
} catch (NumberFormatException e) {
e.printStackTrace();
}
if (index1 <= 0 || index2 <= 0 ||
index1 > table.getRowCount() ||
index2 > table.getRowCount()) {
JOptionPane.showMessageDialog(table, "Selection out of range!");
} else {
table.setRowSelectionInterval(index1 – 1, index2 – 1);
}
});
// Clears row selection
clear.addActionListener(e -> {
table.removeRowSelectionInterval(0, table.getRowCount() – 1);
field1.setText("");
field2.setText("");
});
// Add one more row after the last selected row.
add.addActionListener(event -> {
int index2 = 0;
try {
index2 = Integer.parseInt(field2.getText());
} catch (NumberFormatException e) {
e.printStackTrace();
}
index2 = index2 + 1;
if (index2 <= table.getRowCount()) {
table.addRowSelectionInterval(index2 – 1, index2 – 1);
field2.setText(String.valueOf(index2));
}
});
JPanel command = new JPanel(new FlowLayout());
command.add(label1);
command.add(field1);
command.add(label2);
command.add(field2);
command.add(select);
command.add(clear);
command.add(add);
add(pane, BorderLayout.CENTER);
add(command, BorderLayout.SOUTH);
}
static class MyTableModel extends AbstractTableModel {
private final String[] columns = {"ID", "NAME", "AGE", "A STUDENT?"};
private final Object[][] data = {
{1, "Alice", 20, Boolean.FALSE},
{2, "Bob", 10, Boolean.TRUE},
{3, "Carol", 15, Boolean.TRUE},
{4, "Mallory", 25, Boolean.FALSE}
};
public int getRowCount() {
return data.length;
}
public int getColumnCount() {
return columns.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
@Override
public String getColumnName(int column) {
return columns[column];
}
// This method is used by the JTable to define the default
// renderer or editor for each cell. For example if you have
// a boolean data it will be rendered as a check box. A
// number value is right aligned.
@Override
public Class<?> getColumnClass(int columnIndex) {
return data[0][columnIndex].getClass();
}
}
}
“`
Below is the screen capture of the program.


this only works for consecutive rows. Try selecting row1 and then row 3!