How do I programmatically select JTable’s rows?

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.

Programmatically Select JTable Rows

Programmatically Select JTable Rows

1 Comments

Leave a Reply