我已经创建了一个简单的JTable,并且希望能够在右键单击它并在JPopupMenu中选择带有将禁用所选单元格的JMenuItem的选项后禁用单元格,这是我的MouseAdapter:
private JPopupMenu popup;
private JMenuItem one;
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
int r = table.rowAtPoint(e.getPoint());
if (r >= 0 && r < table.getRowCount()) {
table.setRowSelectionInterval(r, r);
} else {
table.clearSelection();
}
int rowindex = table.getSelectedRow();
if (rowindex < 0)
return;
if (e.isPopupTrigger() && e.getComponent() instanceof JTable) {
int rowIndex = table.rowAtPoint(e.getPoint());
int colIndex = table.columnAtPoint(e.getPoint());
one = new JMenuItem("Disable this cell");
popup = new JPopupMenu();
popup.add(one);
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
});
现在,我知道您可以通过执行以下操作来禁用特定单元格:
DefaultTableModel tab = new DefaultTableModel(data, columnNames) {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
但这是在创建JTable时禁用单元格但我需要在创建后禁用单元格。关于如何做到这一点的任何想法/线索?
答案 0 :(得分:1)
您需要修改TableModel
以为每个单元格的所需可编辑状态添加存储空间,例如List<Boolean>
。您的模型可以从isCellEditable()
返回存储的状态,您的鼠标处理程序可以在TableModel
中设置所需的状态。您可能需要提到here的模型/视图转换方法。