Реализовать кнопки для обработки строк в JTable на основе ActionListener - Java

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста. Мне нужно реализовать кнопки с помощью ActionListener. 1.Добавить(нужно добавить строку). 2.Удалить(удалить выделенную строку) 3.Очистить(все очистить). Пыталась что-то сделать сама, при нажатии на кнопку выдает ошибку : Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: table.TableModel cannot be cast to javax.swing.table.DefaultTableModel
package table;
 
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
 
public class TableImplementation extends JFrame{
    private static final long seriaVersionUID = 2269971701250845501L;
    private String title;
    private Dimension d;
    JButton button1= new JButton("Добавить");
    JButton button2= new JButton("Удалить");
    JButton button3= new JButton("Очистить");
      
    public TableImplementation(String title, Dimension d){
        this.title = title;
        this.d = d;
    
}
    public void init(){
        setTitle(title);
        setSize(d);
        setLayout(new GridBagLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        button2.addActionListener(new Button2ActionListener());//по нажатию на кнопку button1 выполняется метод Button1ActionListener
        button3.addActionListener(new Button3ActionListener());
        
       TableModel tm = new TableModel();
        JTable table = new JTable(tm);//создаем таблицу и у нее модель tm
        
        JScrollPane tableSkroll = new JScrollPane(table);//Этот класс описывает прокрутку
        tableSkroll.setPreferredSize(new Dimension(400,400));//создали размеры таблицы
        String [] str = new String [4];//добавляе данные в строку
        str[0]="0";
        str[1]="Название книги";
        str[2]="45689";
        str[3]="Описание книги";
        
        for(int i=0;i<100;i++)tm.addDate(str);// в классе TableModel (tm) мы описали метод addDate, вот в него и добавляем нашу строку
        
        add (tableSkroll,new GridBagConstraints(0,0,3,1,1,1,GridBagConstraints.NORTH,GridBagConstraints.BOTH,new Insets(1,1,1,1),0,0));
        add ( button1,new GridBagConstraints(0,1,1,1,1,1,GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,1),0,0));
        add ( button2,new GridBagConstraints(1,1,1,1,1,1,GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,1),0,0));
        add ( button3,new GridBagConstraints(2,1,1,1,1,1,GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,1),0,0));
        setVisible(true); 
        pack();
    }
public class Button2ActionListener implements ActionListener{//вешаем слушателя на кнопку button1
    TableModel tm = new TableModel();
    JTable table = new JTable(tm);//
       
        @Override
        public void actionPerformed(ActionEvent event) {
          if(event.getSource()instanceof JButton){
            int sel =table.getSelectedRow();// или номер строки
            DefaultTableModel model = (DefaultTableModel)table.getModel(); 
            model.removeRow(sel);
            
          }
          
        }

        }
public class Button3ActionListener implements ActionListener{//вешаем слушателя на кнопку button1
    TableModel tm = new TableModel();
    JTable table = new JTable(tm);//
       
        @Override
        public void actionPerformed(ActionEvent event) {
          if(event.getSource()instanceof JButton){
              DefaultTableModel model = (DefaultTableModel)table.getModel();
              while (model.getRowCount()>0) {
                 model.removeRow(0);
                }
        }
}
}
}

package table;
 
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
 
public class TableModel extends AbstractTableModel[/B][/B]{//модель таблицы описывается вспомощью класса AbstractTableModel
    private int columnCount = 4;
    private ArrayList<String[]>dataArrayList;//в dataArrayList будут храниться данные таблицы
    
    public TableModel(){
       dataArrayList=new ArrayList<String[]>();
       for(int i =0; i<dataArrayList.size();i++){
          dataArrayList.add(new String[getColumnCount()]);//добавили кол-во колонок в dataArrayList
       }
    }
    @Override
    public int getRowCount() {//кол-во строк
        return  dataArrayList.size();//метод возвращает кол-во строк(кол-во строк в таблице=столько, сколько данных было занесено в  ArrayList<String[]>
    }
 
    @Override
    public int getColumnCount() {//кол-во колонок
        return columnCount;
    }
 
    @Override
    public String getColumnName(int columnIndex){//получили название итой колонки
        switch(columnIndex){
         case 0:return "#id";
         case 1:return "title";
         case 2:return "isbn";
         case 3:return "desciption";
        }
        return "";
    }
    
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {//возвращает определенное значение в определенной ячейки
        String []rows = dataArrayList.get(rowIndex);//по индексу возвращает элемент нашей коллекции
        return rows[columnIndex];//получаем итую колонку(ту колонку, которую передали по параметрам конструктора)
        //получили итый столбец rowIndex, итой строки columnIndex и вернули его 
    }
    public void addDate(String[]row){//метод который будет добавлять данные в таблицу, передаем массив строк для каждой ячейки
        String [] rowTable = new String[getColumnCount()];
        rowTable=row;//создали 1 массив и ему будем присваивать
         dataArrayList.add(rowTable);//добавили 1 элемент таблицы, это 1 строка
    }
    
}

Решение задачи: «Реализовать кнопки для обработки строк в JTable на основе ActionListener»

textual
Листинг программы
public class Button2ActionListener implements ActionListener{//вешаем слушателя на кнопку button1
     
        @Override
        public void actionPerformed(ActionEvent event) {
          if(event.getSource()instanceof JButton){
            int sel =table.getSelectedRow();//получаем номер выделенной строки
            tm.dataArrayList.remove(sel);//удаляем данную позицию из ArrayList в TableModel
            tm.fireTableDataChanged();//обновляем таблицу
          }
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5