通过输入行和列指定单元格,设置该指定单元格是否可编辑,渲染组件,实现效果为整列中个别单元格不可编辑,其余可编辑,渲染不同组件
4条回答 默认 最新
- z同学的编程之路 2023-03-16 10:21关注
可以通过实现JTable的TableCellRenderer和TableCellEditor接口来对指定单元格进行属性设置,包括是否可编辑、渲染组件等。
以下是一个示例代码,演示如何对指定单元格进行属性设置:
import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class MyTable extends JFrame { private JTable table; public MyTable() { super("My Table"); DefaultTableModel model = new DefaultTableModel(new Object[][]{ {"1", "A", "100"}, {"2", "B", "200"}, {"3", "C", "300"} }, new String[]{"ID", "Name", "Value"}); table = new JTable(model); // 设置第2行第3列不可编辑 table.getColumnModel().getColumn(2).setCellEditor(new MyTableCellEditor()); table.getColumnModel().getColumn(2).setCellRenderer(new MyTableCellRenderer()); // 添加表格到窗口 JScrollPane scrollPane = new JScrollPane(table); getContentPane().add(scrollPane); } private class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor { private JTextField textField = new JTextField(); public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (row == 1 && column == 2) { textField.setEditable(false); } else { textField.setEditable(true); } textField.setText(value.toString()); return textField; } public Object getCellEditorValue() { return textField.getText(); } } private class MyTableCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (row == 1 && column == 2) { comp.setBackground(Color.LIGHT_GRAY); } else { comp.setBackground(Color.WHITE); } return comp; } } public static void main(String[] args) { MyTable frame = new MyTable(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); frame.setVisible(true); } }
在示例代码中,我们定义了一个表格,然后使用MyTableCellEditor和MyTableCellRenderer类分别实现了TableCellEditor和TableCellRenderer接口来对指定单元格进行属性设置。在MyTableCellEditor类中,我们实现了getTableCellEditorComponent方法来返回渲染组件,并在其中根据行和列的值设置单元格的可编辑性。在MyTableCellRenderer类中,我们实现了getTableCellRendererComponent方法来返回渲染组件,并在其中根据行和列的值设置单元格的渲染组件。
在示例代码中,我们将第2行第3列的单元格设置为不可编辑,并使用不同的颜色进行渲染。您可以根据实际需求修改示例代码来满足您的需求。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
- ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
- ¥15 cmd cl 0x000007b
- ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
- ¥500 火焰左右视图、视差(基于双目相机)
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号