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 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥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 支付宝网页转账系统不识别账号