Реализовать кнопки для обработки строк в 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
Листинг программы
  1. package table;
  2. import java.awt.Dimension;
  3. import java.awt.GridBagConstraints;
  4. import java.awt.GridBagLayout;
  5. import java.awt.Insets;
  6. import java.awt.TextField;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import javax.swing.JButton;
  10. import javax.swing.JFrame;
  11. import javax.swing.JLabel;
  12. import javax.swing.JScrollPane;
  13. import javax.swing.JTable;
  14. import javax.swing.table.DefaultTableModel;
  15. public class TableImplementation extends JFrame{
  16. private static final long seriaVersionUID = 2269971701250845501L;
  17. private String title;
  18. private Dimension d;
  19. JButton button1= new JButton("Добавить");
  20. JButton button2= new JButton("Удалить");
  21. JButton button3= new JButton("Очистить");
  22. public TableImplementation(String title, Dimension d){
  23. this.title = title;
  24. this.d = d;
  25. }
  26. public void init(){
  27. setTitle(title);
  28. setSize(d);
  29. setLayout(new GridBagLayout());
  30. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  31. setLocationRelativeTo(null);
  32. button2.addActionListener(new Button2ActionListener());//по нажатию на кнопку button1 выполняется метод Button1ActionListener
  33. button3.addActionListener(new Button3ActionListener());
  34. TableModel tm = new TableModel();
  35. JTable table = new JTable(tm);//создаем таблицу и у нее модель tm
  36. JScrollPane tableSkroll = new JScrollPane(table);//Этот класс описывает прокрутку
  37. tableSkroll.setPreferredSize(new Dimension(400,400));//создали размеры таблицы
  38. String [] str = new String [4];//добавляе данные в строку
  39. str[0]="0";
  40. str[1]="Название книги";
  41. str[2]="45689";
  42. str[3]="Описание книги";
  43. for(int i=0;i<100;i++)tm.addDate(str);// в классе TableModel (tm) мы описали метод addDate, вот в него и добавляем нашу строку
  44. add (tableSkroll,new GridBagConstraints(0,0,3,1,1,1,GridBagConstraints.NORTH,GridBagConstraints.BOTH,new Insets(1,1,1,1),0,0));
  45. add ( button1,new GridBagConstraints(0,1,1,1,1,1,GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,1),0,0));
  46. add ( button2,new GridBagConstraints(1,1,1,1,1,1,GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,1),0,0));
  47. add ( button3,new GridBagConstraints(2,1,1,1,1,1,GridBagConstraints.NORTH,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,1),0,0));
  48. setVisible(true);
  49. pack();
  50. }
  51. public class Button2ActionListener implements ActionListener{//вешаем слушателя на кнопку button1
  52. TableModel tm = new TableModel();
  53. JTable table = new JTable(tm);//
  54. @Override
  55. public void actionPerformed(ActionEvent event) {
  56. if(event.getSource()instanceof JButton){
  57. int sel =table.getSelectedRow();// или номер строки
  58. DefaultTableModel model = (DefaultTableModel)table.getModel();
  59. model.removeRow(sel);
  60. }
  61. }
  62.  
  63. }
  64. public class Button3ActionListener implements ActionListener{//вешаем слушателя на кнопку button1
  65. TableModel tm = new TableModel();
  66. JTable table = new JTable(tm);//
  67. @Override
  68. public void actionPerformed(ActionEvent event) {
  69. if(event.getSource()instanceof JButton){
  70. DefaultTableModel model = (DefaultTableModel)table.getModel();
  71. while (model.getRowCount()>0) {
  72. model.removeRow(0);
  73. }
  74. }
  75. }
  76. }
  77. }
  78.  
  79. package table;
  80. import java.util.ArrayList;
  81. import javax.swing.table.AbstractTableModel;
  82. public class TableModel extends AbstractTableModel[/B][/B]{//модель таблицы описывается вспомощью класса AbstractTableModel
  83. private int columnCount = 4;
  84. private ArrayList<String[]>dataArrayList;//в dataArrayList будут храниться данные таблицы
  85. public TableModel(){
  86. dataArrayList=new ArrayList<String[]>();
  87. for(int i =0; i<dataArrayList.size();i++){
  88. dataArrayList.add(new String[getColumnCount()]);//добавили кол-во колонок в dataArrayList
  89. }
  90. }
  91. @Override
  92. public int getRowCount() {//кол-во строк
  93. return dataArrayList.size();//метод возвращает кол-во строк(кол-во строк в таблице=столько, сколько данных было занесено в ArrayList<String[]>
  94. }
  95. @Override
  96. public int getColumnCount() {//кол-во колонок
  97. return columnCount;
  98. }
  99. @Override
  100. public String getColumnName(int columnIndex){//получили название итой колонки
  101. switch(columnIndex){
  102. case 0:return "#id";
  103. case 1:return "title";
  104. case 2:return "isbn";
  105. case 3:return "desciption";
  106. }
  107. return "";
  108. }
  109. @Override
  110. public Object getValueAt(int rowIndex, int columnIndex) {//возвращает определенное значение в определенной ячейки
  111. String []rows = dataArrayList.get(rowIndex);//по индексу возвращает элемент нашей коллекции
  112. return rows[columnIndex];//получаем итую колонку(ту колонку, которую передали по параметрам конструктора)
  113. //получили итый столбец rowIndex, итой строки columnIndex и вернули его
  114. }
  115. public void addDate(String[]row){//метод который будет добавлять данные в таблицу, передаем массив строк для каждой ячейки
  116. String [] rowTable = new String[getColumnCount()];
  117. rowTable=row;//создали 1 массив и ему будем присваивать
  118. dataArrayList.add(rowTable);//добавили 1 элемент таблицы, это 1 строка
  119. }
  120. }

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут