big星 2023-03-16 10:05 采纳率: 76.9%
浏览 24
已结题

jtable如何对指定单元格进行属性设置

通过输入行和列指定单元格,设置该指定单元格是否可编辑,渲染组件,实现效果为整列中个别单元格不可编辑,其余可编辑,渲染不同组件

  • 写回答

4条回答 默认 最新

  • z同学的编程之路 2023-03-16 10:21
    关注

    可以通过实现JTable的TableCellRenderer和TableCellEditor接口来对指定单元格进行属性设置,包括是否可编辑、渲染组件等。

    以下是一个示例代码,演示如何对指定单元格进行属性设置:

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;
    
    publicclassMyTableextendsJFrame {
        private JTable table;
    
        publicMyTable() {
            super("My Table");
            DefaultTableModelmodel=newDefaultTableModel(newObject[][]{
                {"1", "A", "100"},
                {"2", "B", "200"},
                {"3", "C", "300"}
            }, newString[]{"ID", "Name", "Value"});
    
            table = newJTable(model);
    
            // 设置第2行第3列不可编辑
            table.getColumnModel().getColumn(2).setCellEditor(newMyTableCellEditor());
            table.getColumnModel().getColumn(2).setCellRenderer(newMyTableCellRenderer());
    
            // 添加表格到窗口
            JScrollPanescrollPane=newJScrollPane(table);
            getContentPane().add(scrollPane);
        }
    
        privateclassMyTableCellEditorextendsAbstractCellEditorimplementsTableCellEditor {
            privateJTextFieldtextField=newJTextField();
    
            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();
            }
        }
    
        privateclassMyTableCellRendererextendsDefaultTableCellRenderer {
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                Componentcomp=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;
            }
        }
    
        publicstaticvoidmain(String[] args) {
            MyTableframe=newMyTable();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 200);
            frame.setVisible(true);
        }
    }
    

    在示例代码中,我们定义了一个表格,然后使用MyTableCellEditor和MyTableCellRenderer类分别实现了TableCellEditor和TableCellRenderer接口来对指定单元格进行属性设置。在MyTableCellEditor类中,我们实现了getTableCellEditorComponent方法来返回渲染组件,并在其中根据行和列的值设置单元格的可编辑性。在MyTableCellRenderer类中,我们实现了getTableCellRendererComponent方法来返回渲染组件,并在其中根据行和列的值设置单元格的渲染组件。

    在示例代码中,我们将第2行第3列的单元格设置为不可编辑,并使用不同的颜色进行渲染。您可以根据实际需求修改示例代码来满足您的需求。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月16日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)