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