无法编辑JTable单元格

时间:2016-05-15 12:03:44

标签: java swing jtable

我的要求是,我必须在单元格中添加一个表格单元格渲染器,其中包含从数据库和按钮获取的数据。

当我在数据中双击该单元格时,该单元格应该是可编辑的,以便用户可以更改数据。 当我双击按钮时,会再次打开一个对话框,当我单击该对话框中的“确定”按钮时,该对话框将接受来自用户的数据,数据应填充在上一个表格单元格中。 目前,我能够渲染数据和图像,当我点击按钮时,它会打开另一个对话框并接受用户的数据。

我的问题:

  1. 无法编辑单元格
  2. 如何捕获已修改的值
  3. 如何在此单元格的其他对话框中显示接受的值。
  4. 目前下面的图片没有显示文字,但是对于其他单元格,我能够显示。

    带有文字和按钮的

    JTable单元格

    jTableTestCases.setModel(new javax.swing.table.DefaultTableModel(             new Object [] [] {

            },
            new String [] {
                "Select", "Status", "ID", "Title", "Config", "Tester", "TestCase Name"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Boolean.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                true, false, false, false, false, false, true
            };
    
            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
    
            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
    
        }); static class MyTableEditor extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {
    
        JPanel jpanel;
        JLabel label;
        JButton button;
    
    
    
        MyTableEditor() {
            label = new JLabel();
            button = new JButton("Click Me!!!");
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                   JOptionPane.showMessageDialog(null, "Hi" );
                }
    
            });
    
            GridLayout gridLayout = new GridLayout(0,2);
            jpanel = new JPanel();
            jpanel.setLayout(gridLayout);
            jpanel.setBorder(new EmptyBorder(0, 10, 0, 10));
            jpanel.add(label);
            jpanel.add(button);
        }
    
        @Override
        public Object getCellEditorValue() {
            return null;
        }
    
        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
           if(null!=value)
            label.setText(value.toString());
    
            jpanel.setBackground(table.getSelectionBackground());
    
            return jpanel;
        }
    
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
             if(null!=value)
            label.setText(value.toString());
            if(isSelected){
              jpanel.setBackground(table.getSelectionBackground());
            }else{
              jpanel.setBackground(table.getBackground());
            }
            return jpanel;
        }
    
    }jTableTestCases.getColumn("TestCase Name").setCellRenderer(new MyTableEditor());
                 jTableTestCases.getColumn("TestCase Name").setCellEditor(new MyTableEditor());
    

1 个答案:

答案 0 :(得分:1)

  

,用户在文本框中输入一个值,只要单击确定按钮,输入的值就会显示在按钮旁边的表格单元格中,我应该能够读取值

为什么要创建此弹出窗口?

JTable的设计使您可以直接在单元格中输入文本。您可以开始输入,文本将会更新。或者您可以双击单元格,将显示编辑器。

但是如果你真的想要显示弹出窗口,那么你可以查看Table Popup Editor

每当您单击单元格时,使用F2键或键入将显示JDialog的字符,您可以输入文本。