To allow a row selection or a column selection or both row and column selection in JTable
component we can turn it on and off by calling the JTable
‘s setRowSelectionAllowed()
and JTable
‘s setColumnSelectionAllowed()
methods.
Both of these methods accept a boolean
value indicating whether the selection is allowed or not allowed. Setting both of them to true
allow us to select rows and columns from JTable
.
package org.kodejava.swing;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumnModel;
import java.awt.*;
public class TableAllowColumnSelection extends JPanel {
public TableAllowColumnSelection() {
initializePanel();
}
public static void showFrame() {
JPanel panel = new TableAllowColumnSelection();
panel.setOpaque(true);
JFrame frame = new JFrame("JTable Column Selection");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(TableAllowColumnSelection::showFrame);
}
private void initializePanel() {
this.setLayout(new BorderLayout());
this.setPreferredSize(new Dimension(500, 500));
JTable table = new JTable(new PremiereLeagueTableModel());
TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(0).setPreferredWidth(200);
// setting to false disallow row selection in the table model
table.setRowSelectionAllowed(false);
// setting to true allow column selection in the table model
table.setColumnSelectionAllowed(true);
JScrollPane pane = new JScrollPane(table);
this.add(pane, BorderLayout.CENTER);
}
static class PremiereLeagueTableModel extends AbstractTableModel {
// TableModel's column names
private final String[] columnNames = {
"CLUB", "MP", "W", "D", "L", "GF", "GA", "GD", "PTS"
};
// TableModel's data
private final Object[][] data = {
{"Chelsea", 8, 6, 1, 1, 16, 3, 13, 19},
{"Liverpool", 8, 5, 3, 0, 22, 6, 16, 18},
{"Manchester City", 8, 5, 2, 1, 16, 3, 13, 17},
{"Brighton", 8, 4, 3, 1, 8, 5, 3, 15},
{"Tottenham", 8, 5, 0, 3, 9, 12, -3, 15}
};
@Override
public int getRowCount() {
return data.length;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(0, columnIndex).getClass();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
}
}
Latest posts by Wayan (see all)
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024