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ć...