Реализовать кнопки для обработки строк в 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();//обновляем таблицу } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д