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.
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.
Latest posts by Wayan (see all)
- How do I use Proxy class to configure HTTP and SOCKS proxies in Java? - March 27, 2025
- How do I retrieve network interface information using NetworkInterface in Java? - March 26, 2025
- How do I work with InetAddress to resolve IP addresses in Java? - March 25, 2025
this only works for consecutive rows. Try selecting row1 and then row 3!