Удаление строки JTable с помощью пользовательского редактора ячеек

У меня есть JTable, в котором я добавил JButton(кнопка Удалить) и JComboBox в качестве пользовательских редакторов ячеек на двух столбцах. Теперь, когда я выбираю элемент в Combobox и нажимаю кнопку "Удалить", выбранная строка удаляется, но в строке отображается комбинированный список удаленной строки. Нужно ли убирать редактор ячеек из таблицы. Код работает нормально, если я не выбрал свой выпадающий список. Пожалуйста, помогите мне.

Вот как выглядит мой код:

class JTableRenderer extends JButton implements TableCellRenderer, TableCellEditor{

    private JComboBox   sens_type_cb;

    @Override
    public Component getTableCellRendererComponent(final JTable table, Object value, final boolean isSelected, final boolean hasFocus, final int row, int column) {     


     if(column == 1)
        {
            System.out.println("Row " + row);

            sens_type_cb = new JComboBox(new String[]{"Radar", "EO", "Aerial", "UAV", "Other"});
            return sens_type_cb;

        }

    }

     @Override
    public void addActionListener(ActionListener listener)
    {

        sens_type_cb.addActionListener(listener);

    }


    @Override
    public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, final int row, int column) {


        if(column == 1)
        {
           ActionListener listen = new ActionListener() 
            {
                @Override
                public void actionPerformed(ActionEvent e) 
                {

                        if (table.isEditing())
                            table.getCellEditor().stopCellEditing();
                        //table.clearSelection();

                }
            };
            sens_type_cb.addActionListener(listen);
            return sens_type_cb;

        }


        else
            return super.getParent(); 

    }

public void addActionListener(ActionListener listener)
    {

        sens_type_cb.addActionListener(listener);

    }


Next I create Class SensorConf in which I create a table:-

public class SensorConf extends javax.swing.JFrame {

    private static SensorConf conf_obj = new SensorConf();
    /* A private Constructor prevents any other class from instantiating. */
    //private SensorConf(){ }
    /* Static 'instance' method */
    public static SensorConf getInstance( ) {
        return conf_obj;
    }

    Action delete = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
        JTable table = (JTable)e.getSource();
        int modelRow = Integer.valueOf( e.getActionCommand() );
        ((DefaultTableModel)table.getModel()).removeRow(modelRow);
    }
};
    public void CreateTable()
    {


       //  jTable1.setModel(model);
         jTable1.getColumn("S.No.").setPreferredWidth(40);
         jTable1.getColumn("Sensor Type").setPreferredWidth(80);

         jTable1.getColumn("").setPreferredWidth(40);
         jTable1.getColumnModel().getColumn(1).setResizable(false);
         jTable1.getTableHeader().setReorderingAllowed(false);
         jTable1.setRowHeight(25);



         javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();
         model.addRow(new Object[]{"", "", "", "", "", ""});

         JTableRenderer tableRenderer = new JTableRenderer();


         model.getRowCount();
         model.setValueAt(new Integer(model.getRowCount()), model.getRowCount()-1,0);


         jTable1.getColumnModel().getColumn(1).setCellEditor(tableRenderer);
         jTable1.getColumnModel().getColumn(1).setCellRenderer(tableRenderer);


         ButtonColumn buttonColumn = new ButtonColumn(jTable1, delete, 6);

       }

        private SensorConf() {
        initComponents();
        CreateTable();

    }

Я создаю экземпляр объекта моего класса в main и, нажав кнопку Add вне таблицы, я добавляю строку model.addRow(new Object[]{"", "", "", "", "", ""}); к моему столу. Пожалуйста, помогите мне узнать, где я совершаю ошибку. Благодарю.

1 ответ

Похоже, что ячейка comboBox все еще находится в режиме редактирования. Вы должны убедиться, что редактирование ячейки было отменено, прежде чем удалять строку.

Вы можете попробовать использовать Столбец Кнопка Столбец. Я должен признать, что я никогда не пробовал этот класс в вашем сценарии, но код вызывает fireEditingStopped(), так что ожидайте, что это должно работать.

Редактировать:

Вы можете найти полезной Редактирование Стоп Стола.

Другие вопросы по тегам