禁用或启用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];
}
}
}