禁用或启用JTable的单元格选择可以通过调用setCellSelectionEnabled(boolean cellSelectionEnabled)方法来完成。此方法接受一个boolean值。调用此方法还将分别更改表的行和列选择的状态。
要完全删除JTable组件的选择功能,我们可以false通过调用setFocusable(boolean focusable)方法将其可聚焦状态更改为。
package org.nhooo.example.swing; import javax.swing.*; import javax.swing.table.AbstractTableModel; import java.awt.*; public class JTableDisableSelection extends JPanel { public JTableDisableSelection() { initializePanel(); } private void initializePanel() { setLayout(new BorderLayout()); setPreferredSize(new Dimension(500, 200)); JTable table = new JTable(new PremiereLeagueTableModel()); table.getColumnModel().getColumn(0).setMinWidth(150); // 禁用表格的单元格选择。 table.setCellSelectionEnabled(false); // 将设置表焦点设置为false完全删除选择 // 表组件的功能。 table.setFocusable(false); JScrollPane pane = new JScrollPane(table); add(pane, BorderLayout.CENTER); } public static void showFrame() { JPanel panel = new JTableDisableSelection(); panel.setOpaque(true); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("JTable Disable Selection"); frame.setContentPane(panel); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JTableDisableSelection.showFrame(); } }); } class PremiereLeagueTableModel extends AbstractTableModel { // TableModel的列名 private String[] columnNames = { "TEAM", "P", "W", "D", "L", "GS", "GA", "GD", "PTS" }; // TableModel的数据 private Object[][] data = { {"Liverpool", 3, 3, 0, 0, 7, 0, 7, 9}, {"Tottenham", 3, 3, 0, 0, 8, 2, 6, 9}, {"Chelsea", 3, 3, 0, 0, 8, 3, 5, 9}, {"Watford", 3, 3, 0, 0, 7, 2, 5, 9}, {"Manchester City", 3, 2, 1, 0, 9, 2, 7, 7} }; public int getRowCount() { return data.length; } public int getColumnCount() { return columnNames.length; } @Override public String getColumnName(int column) { return columnNames[column]; } public Object getValueAt(int rowIndex, int columnIndex) { return data[rowIndex][columnIndex]; } } }