Błędy podczas update, usuwania wierszy w JTable

0

Witam podczas update i usuwania wierszy kiedy wychodzę z programu i zapisuję go do pliku to wyrzuca mi błąd:

javax.swing.jtable$cell editor remover

oto kod:

Model tabeli:

 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package wypozyczalnia_filmow;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;




class baza extends JFrame implements ActionListener
{
   
File a;
JButton dodaj,usun,edytuj,impo,ekspo,wyszukaj;
JTable baza;
Object wiersz[][]; //objektreprezentujący wiersz tabeli
DefaultTableModel model;
JFileChooser chooserzapis= new JFileChooser();
JFileChooser chooserodczyt= new JFileChooser();


  
public void  baza()
{
  
    
setTitle("Baza"); //tytuł okna
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
String kolumna[] = {"Tytuł","Czas trwania","Kategoria","Nośnik","Rok premiery","Opis","Obsada","Reżyser"}; // tytuły kolumn tabeli
model = new DefaultTableModel(wiersz, kolumna); //definiowanie modeu tabeli
baza = new JTable(model);
setLayout(new FlowLayout(FlowLayout.CENTER));
JScrollPane js = new JScrollPane(baza,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
js.setPreferredSize(new Dimension(700,700)); // rozmiar obszaru tabeli





dodaj = new JButton("Dodaj");
usun = new JButton("Usuń");
edytuj=new JButton("Edytuj");
impo=new JButton("Importuj");
ekspo=new JButton("Eksportuj");
wyszukaj=new JButton("Wyszukaj");

add(dodaj);
add(usun);
add(edytuj);
add(impo);
add(ekspo);
add(wyszukaj);
add(js);

dodaj.addActionListener(this);
usun.addActionListener(this);
impo.addActionListener(this);
ekspo.addActionListener(this);
edytuj.addActionListener(this);

baza.setAutoCreateRowSorter(true);


setSize(1000,1000);
setVisible(true);
new wczytywanie_przy_otwieraniu(this);
//wczytaj();
WindowListener sluchacz = new Zamykanie();
addWindowListener(sluchacz);
  
}

    

// Zamykanie okna
class Zamykanie extends WindowAdapter
{ 
public void windowClosing(WindowEvent e)
{ 
int answer = JOptionPane.showConfirmDialog(null, "Czy na pewno chcesz zamknąć program", "Koniec", JOptionPane.YES_NO_OPTION);
if (answer == JOptionPane.YES_OPTION)
{
     
  new zapiszprogram(baza.this);
    //zapisz();
    dispose();
} 
}
}

public void wczytaj()
{
    
    try
{
        FileInputStream h = new FileInputStream("bazadmina.txt");
        ObjectInputStream obe = new ObjectInputStream(h);
      baza.setModel((TableModel) obe.readObject());
        model.fireTableDataChanged();
    
}
catch(IOException | ClassNotFoundException exe)
{
   System.out.println(exe);
}    
}


@Override
public void actionPerformed(ActionEvent e) {

Object z=e.getSource(); // Stworzenie obiektu, który jest źródłem sygnału

      
 if(z==dodaj)
{
formularz_dodawania_filmow y= new formularz_dodawania_filmow(baza.this);

   
}
    
else if(z==usun)
{
    
model.removeRow(baza.getSelectedRow());
model.fireTableDataChanged();
}
        


else if(z==edytuj)
    
{    
   Update y= new Update(baza.this);
   //model.fireTableDataChanged();
    
}

//Zapis tabeli do pliku
 else if(z==impo)
 {
     
  

 }
 

 
//Wczytanie modelu tabeli z pliku  
else if(z==ekspo)
{ 
    


}  

}
 
}



   
 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package wypozyczalnia_filmow;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import javax.swing.JOptionPane;

/**
 *
 * @author Marek
 */
public class zapiszprogram  {
    
     baza mainWindow = null;

   
public zapiszprogram(baza mainWindow)
{   
     
        this.mainWindow = mainWindow;
         try
            {
                FileOutputStream f = new FileOutputStream("bazadmina.txt");
                ObjectOutputStream str = new ObjectOutputStream(f);
                str.writeObject( mainWindow.baza.getModel());
                str.flush();
                f.close();
            }
            catch(IOException e)
            {
               System.out.println(e);
            }
}
}

package wypozyczalnia_filmow;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
 
public class wczytywanie_przy_otwieraniu
{
baza mainWindow = null;    
 
public wczytywanie_przy_otwieraniu(baza mainWindow)
{   
this.mainWindow = mainWindow;
try
{
        FileInputStream h = new FileInputStream("bazadmina.txt");
        ObjectInputStream obe = new ObjectInputStream(h);
        mainWindow.baza.setModel((TableModel) obe.readObject());
        mainWindow.model.fireTableDataChanged();
    
}
catch(IOException | ClassNotFoundException exe)
{
  System.out.println(exe);
}    
}
} 

Formularz dodawania

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package wypozyczalnia_filmow;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Marek
 */
//@SuppressWarnings("serial")
public class formularz_dodawania_filmow  extends JFrame implements ActionListener{
    
JButton dodajfilm,anuluj;
JLabel ltytul, lnosnik,lkategoria,lrokpremiery,lczastrwania,lopis,lobsada,lrezyser,graf;
JTextField ttytul,tczastrwania,topis,tobsada,trezyser;
JComboBox kategorielista,nosnik,rokpremiery;
String txtytul,txopis,txobsada,txrezyser;
Double txdlugosc;
JCheckBox polecane;
baza oknoBazy;

public formularz_dodawania_filmow (baza oknoBazy)
{
        this.oknoBazy = oknoBazy; 
        
        setTitle("Dodaj film");
        setTitle("Dodaj film");
        setSize(500,500);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
        setLayout(null);
        
        lkategoria= new JLabel("Kategoria:");
        kategorielista= new JComboBox();
        kategorielista.setBounds(200,20,180,20);
        kategorielista.addItem("Wybierz kategorię filmu");
        kategorielista.addItem("Akcja");
        kategorielista.addItem("Dramat");
        kategorielista.addItem("Horror");
        kategorielista.addItem("Kryminał");
        kategorielista.addItem("Wojenny");
        kategorielista.addItem("Thriller");
        add(kategorielista);
        
        lnosnik= new JLabel("Rodzaj nośnika:");
        nosnik= new JComboBox();
        nosnik.setBounds(20,20,150,20);
        nosnik.addItem("Rodzaj nośnika");
        nosnik.addItem("CD");
        nosnik.addItem("DVD");
        nosnik.addItem("Blu-ray");
        add(nosnik);
        
        
        ltytul= new JLabel("Tytuł filmu:");
        ltytul.setBounds(20,40,170,40);
        add(ltytul);
        ttytul= new JTextField("");
        ttytul.setBounds(160,50,250,20);
        add(ttytul);
        
        txtytul=ttytul.getText();
        
        
        rokpremiery= new JComboBox();
        rokpremiery.setBounds(160,80,250,20);
        rokpremiery.addItem("Wybierz rok premiery");
        rokpremiery.addItem("2016");
        rokpremiery.addItem("2015");
        rokpremiery.addItem("2014");
        rokpremiery.addItem("2013");
        rokpremiery.addItem("2012");
        rokpremiery.addItem("2011");
        add(rokpremiery);
      
        
        lczastrwania= new JLabel("Długość trwania:");
        lczastrwania.setBounds(20,100,230,100);
        add(lczastrwania);
        tczastrwania= new JTextField("");
        tczastrwania.setBounds(160,140,250,20);
        add(tczastrwania);
        
        
        lrezyser= new JLabel("Reżyser:");
        lrezyser.setBounds(20,120,250,120);
        add(lrezyser);
        trezyser= new JTextField("");
        trezyser.setBounds(160,170,250,20);
        add( trezyser);
        
        
        
        lobsada= new JLabel("Obsada:");
        lobsada.setBounds(20,140,270,140);
        add(lobsada);
        tobsada= new JTextField("");
        tobsada.setBounds(160,200,250,100);
        add(tobsada);
        
        
             
        lopis= new JLabel("Opis fabuły:");
        lopis.setBounds(20,235,290,160);
        add(lopis);
        topis= new JTextField("",500);
        topis.setBounds(160,325,250,100);
        add(topis);
        setVisible(true);
      
        dodajfilm= new JButton("Dodaj film");
        dodajfilm.setBounds(160,435,100,20);        
        add(dodajfilm);
        dodajfilm.addActionListener(this);
        dodajfilm.setActionCommand("dodajfilm");
                //Definiowanie przycisku anuluj
        anuluj= new JButton("Anuluj");
        anuluj.setBounds(305,435,100,20);        
        add(anuluj);
        anuluj.addActionListener(this);
      
         
       
       WindowListener slu = new Zam();
        addWindowListener(slu);
      
        
            
    }
class Zam extends WindowAdapter
{ 
public void windowClosing(WindowEvent e)
{ 
int answer = JOptionPane.showConfirmDialog(null, "Czy na pewno chcesz zamknąć program", "Koniec", JOptionPane.YES_NO_OPTION);
if (answer == JOptionPane.YES_OPTION)
{
     

    dispose();
} 
}
}
    formularz_dodawania_filmow() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
  
@Override
public void actionPerformed(ActionEvent e) {
Object z=e.getSource(); // Źródło zdarzeń

       
       
 if(z==dodajfilm)
{       
        
        oknoBazy.model = (DefaultTableModel) oknoBazy.baza.getModel();
        oknoBazy.model.addRow(new Object[]{ttytul.getText().toString(),tczastrwania.getText().toString(),
        kategorielista.getSelectedItem().toString(),nosnik.getSelectedItem().toString(),rokpremiery.getSelectedItem().toString(),
        topis.getText().toString(),tobsada.getText().toString(),trezyser.getText().toString()});
        
        
       oknoBazy.model.fireTableDataChanged();
        
        dispose();

 
}
       
else if (z==anuluj)
{

                
              
                   dispose();
}
       
  
 }

       

  
        
}
    
    

 

Formularz Update'u

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package wypozyczalnia_filmow;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Marek
 */
//@SuppressWarnings("serial")
public class Update  extends JFrame implements ActionListener{
    
JButton Update,anuluj;
JLabel ltytul, lnosnik,lkategoria,lrokpremiery,lczastrwania,lopis,lobsada,lrezyser,graf;
JTextField ttytul,tczastrwania,topis,tobsada,trezyser;
JComboBox kategorielista,nosnik,rokpremiery;
String txtytul,txopis,txobsada,txrezyser;
Double txdlugosc;
JCheckBox polecane;
baza oknoBazy;

public Update (baza oknoBazy)
{
        this.oknoBazy = oknoBazy; 
        
        setTitle("Dodaj film");
        setTitle("Dodaj film");
        setSize(500,500);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
        setLayout(null);
        
        lkategoria= new JLabel("Kategoria:");
        kategorielista= new JComboBox();
        kategorielista.setBounds(200,20,180,20);
        kategorielista.addItem("Wybierz kategorię filmu");
        kategorielista.addItem("Akcja");
        kategorielista.addItem("Dramat");
        kategorielista.addItem("Horror");
        kategorielista.addItem("Kryminał");
        kategorielista.addItem("Wojenny");
        kategorielista.addItem("Thriller");
        add(kategorielista);
        
        lnosnik= new JLabel("Rodzaj nośnika:");
        nosnik= new JComboBox();
        nosnik.setBounds(20,20,150,20);
        nosnik.addItem("Rodzaj nośnika");
        nosnik.addItem("CD");
        nosnik.addItem("DVD");
        nosnik.addItem("Blu-ray");
        add(nosnik);
        
        
        ltytul= new JLabel("Tytuł filmu:");
        ltytul.setBounds(20,40,170,40);
        add(ltytul);
        ttytul= new JTextField("");
        ttytul.setBounds(160,50,250,20);
        add(ttytul);
        
        txtytul=ttytul.getText();
        
        
        rokpremiery= new JComboBox();
        rokpremiery.setBounds(160,80,250,20);
        rokpremiery.addItem("Wybierz rok premiery");
        rokpremiery.addItem("2016");
        rokpremiery.addItem("2015");
        rokpremiery.addItem("2014");
        rokpremiery.addItem("2013");
        rokpremiery.addItem("2012");
        rokpremiery.addItem("2011");
        add(rokpremiery);
      
        
        lczastrwania= new JLabel("Długość trwania:");
        lczastrwania.setBounds(20,100,230,100);
        add(lczastrwania);
        tczastrwania= new JTextField("");
        tczastrwania.setBounds(160,140,250,20);
        add(tczastrwania);
        
        
        lrezyser= new JLabel("Reżyser:");
        lrezyser.setBounds(20,120,250,120);
        add(lrezyser);
        trezyser= new JTextField("");
        trezyser.setBounds(160,170,250,20);
        add( trezyser);
        
        
        
        lobsada= new JLabel("Obsada:");
        lobsada.setBounds(20,140,270,140);
        add(lobsada);
        tobsada= new JTextField("");
        tobsada.setBounds(160,200,250,100);
        add(tobsada);
        
        
             
        lopis= new JLabel("Opis fabuły:");
        lopis.setBounds(20,235,290,160);
        add(lopis);
        topis= new JTextField("",500);
        topis.setBounds(160,325,250,100);
        add(topis);
        setVisible(true);
      
        Update= new JButton("Update");
        Update.setBounds(160,435,100,20);        
        add(Update);
        Update.addActionListener(this);
        Update.setActionCommand("dodajfilm");
                //Definiowanie przycisku anuluj
        anuluj= new JButton("Anuluj");
        anuluj.setBounds(305,435,100,20);        
        add(anuluj);
        anuluj.addActionListener(this);
      
         
       
       WindowListener slu = new Zam();
        addWindowListener(slu);
      
        
            
    }
class Zam extends WindowAdapter
{ 
public void windowClosing(WindowEvent e)
{ 
int answer = JOptionPane.showConfirmDialog(null, "Czy na pewno chcesz zamknąć program", "Koniec", JOptionPane.YES_NO_OPTION);
if (answer == JOptionPane.YES_OPTION)
{
     

    dispose();
} 
}
}
    Update() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
  
@Override
public void actionPerformed(ActionEvent e) {
Object z=e.getSource(); // Źródło zdarzeń

       
       
 if(z==Update)
{       
        
         int i = oknoBazy.baza.getSelectedRow();
                
                if(i >= 0) 
                {
                   oknoBazy.model.setValueAt(ttytul.getText(), i, 0);
                   oknoBazy.model.setValueAt(trezyser.getText(), i, 1);
                   oknoBazy.model.setValueAt(tobsada.getText(), i, 2);
                   oknoBazy.model.setValueAt(rokpremiery.getSelectedItem(), i, 3);
                }
                else{
                    System.out.println("Update Error");
                }
        
        dispose();

 
}
       
else if (z==anuluj)
{
   
                   dispose();
}
       
  
 }

       

  
        
}
    
    
    
    
   
    

 

Bardzo proszę o pomoc, do jutra muszę to oddać...

0

Debugger podpowiada, że nie mam obsłużonego, napisanego wyjątki javax.swing.jtable$cell editor remover.. Jednak nie wiem jak to zrobić.. Macie jakiś pomysł?

0

Domyślam się, że chodzi o to, że Ovveride przesłania model tabeli i ustawia go jakby na null, ale nie wiem jak to poprawić. Macie jakiś pomysł?

Jak edytuje jeden wiersz albo usune jeden,zamkne okno [zapisze sie do pliku] otwieram[wczytuje plik] to otwiera sie pusta tabela..
P.S

@bogdans

Poprawiłem to co wcześniej mi wskazywałeś..

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.