Generowanie JTable

0

Pomóżcie, program na zaliczenie i nie wiem, gdzie leży błąd [glowa]

Projekt wygląda następująco :
user image
W pakiecie domyślnym mam klasę Main:

import java.awt.EventQueue;
import beans.*;
import layout.*;
import modules.*;


public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				OknoGlowne o = new OknoGlowne();
			}
		});
	}

}

W pakiecie "beans" przechowuję klasę Samochod:

package beans;



import java.sql.ResultSet;
import java.util.ArrayList;

import modules.Modul;

public class Samochod {
private int id;
private String marka;
private String model;
private double minSpalanieMiasto;
private double maxSpalanieMiasto;
private double spalanieTrasa;
private int czesci;

public void setID(int id){
	this.id=id;
}
public void setMarka(String marka){
	this.marka=marka;
	}
public void setModel(String model){
	this.model=model;
	}
public void setMinSpalanieMiasto(double minSpalanieMiasto){
	this.minSpalanieMiasto=minSpalanieMiasto;
	}
public void setMaxSpalanieMiasto(double maxSpalanieMiasto){
	this.maxSpalanieMiasto=maxSpalanieMiasto;
	}
public void setSpalanieTrasa(double spalanieTrasa){
	this.spalanieTrasa=spalanieTrasa;
}
public void setCzesci(int czesci){
	this.czesci=czesci;
}
public int getId(){
	return this.id;
}
public String getMarka(){
	return marka;
	}
public String getModel(){
	return model;
	}
public double getMinSpalanieMiasto(){
	return minSpalanieMiasto;
	}
public double getMaxSpalanieMiasto(){
	return maxSpalanieMiasto;
	}
public double getSpalanieTrasa(){
	return spalanieTrasa;
}
public int getCzesci(){
	return czesci;
}
public String UsunSamochod(){
	Modul o = new Modul();
	String Cad = "delete from samochod where id="+this.getId()+"'";
	return o.Execute(Cad);
}
public String NowySamochod(){
	Modul o = new Modul();
	String Cad = "insert into samochod values ('" + this.id+", '" + this.marka +"', "+"'"+ this.model + "', " +"'"+ this.minSpalanieMiasto +"', " + "'" + this.maxSpalanieMiasto + "', " +"'"+ this.spalanieTrasa + "', " + "'" + this.czesci + "')";
	return o.Execute(Cad);
}
public String EdytujSamochod(){
	Modul o = new Modul();
	String Cad = "update samochod set ('" + this.marka +"', "+"'"+ this.model + "', " +"'"+ this.minSpalanieMiasto +"', " + "'" + this.maxSpalanieMiasto + "', " +"'"+ this.spalanieTrasa + "', " + "'" + this.czesci + "' where id ='"+this.getId()+"'";
	return o.Execute(Cad);
}
public ArrayList<Samochod>ListaSamochodow(){
	ArrayList lista2 = new ArrayList();
	try{
	Modul o = new Modul();
	ResultSet tabela = o.Write("select * from samochod");
	Samochod jakis;
	while(tabela.next()){
		jakis=new Samochod();
		jakis.setID(tabela.getInt("id"));
		jakis.setMarka(tabela.getString("marka"));
		jakis.setModel(tabela.getString("model"));
		jakis.setMinSpalanieMiasto(tabela.getDouble("minSpalanieMiasto"));
		jakis.setMaxSpalanieMiasto(tabela.getDouble("maxSpalanieMiasto"));
		jakis.setSpalanieTrasa(tabela.getDouble("spalanieTrasa"));
		jakis.setCzesci(tabela.getInt("czesci"));
		lista2.add(o);
	}
	}catch(Exception e){
		javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
	}
	return lista2;
}
}

W pakiecie modules przechowuję klasę Modul:
</image>package modules;

import java.sql.*;
public class Modul {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc//localhost:3306/baza1";
String user = "root";
String pwd = "kwiatek";

public ResultSet Write (String Cad){
	try{
	Class.forName(driver).newInstance();
	Connection cn=DriverManager.getConnection(url,user,pwd);
	PreparedStatement da = cn.prepareStatement(Cad);
	ResultSet tbl = da.executeQuery();
	return tbl;}
	catch (Exception e){
		javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
		return null;
	}
	
}

public String Execute (String Cad){
	try{
	Class.forName(driver).newInstance();
	Connection cn=DriverManager.getConnection(url,user,pwd);
	PreparedStatement da = cn.prepareStatement(Cad);
	int r = da.executeUpdate();
	return "Se afectaron "+r+" filas ";}
	catch (Exception e){
		javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
		return "Error"+e.getMessage();
	}
}

}

W klasie layout mam okno główne, w którym po wciśnięciu menu pokazuje się OknoSamochod.
Okno Główne:

package layout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class OknoGlowne extends JFrame{
private JMenuBar menubar;
private JMenu menuSamochod;
private JMenu menuOsoba;
private JMenuItem menuItemSamochod;
private JMenuItem menuItemOsoba;

public OknoGlowne(){
	setTitle("Utrzymanie samochodu");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setBounds(500, 200, 500, 500);
	setVisible(true);
	setResizable(false);
	setLayout(null);
	// tworzenie menu:
	menubar = new JMenuBar();
	setJMenuBar(menubar);
	
	menuSamochod = new JMenu("Samochod");
	menubar.add(menuSamochod);
	menuOsoba = new JMenu("Osoba");
	menubar.add(menuOsoba);
	
	menuItemSamochod = new JMenuItem("Baza danych samochodów");
	menuSamochod.add(menuItemSamochod);
	menuItemSamochod.addActionListener(new ActionDodajSamochod());
			
	menuItemOsoba = new JMenuItem("Baza danych osób");
	menuOsoba.add(menuItemOsoba);

	
	
}

static class ActionDodajSamochod implements ActionListener{
public void actionPerformed(ActionEvent e) {
OknoSamochod s = new OknoSamochod();

}

}
}

oknoSamochod:

package layout;

import java.util.ArrayList;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import beans.*;

public class OknoSamochod extends JFrame {
private JTable tabela_glowna;

public OknoSamochod(){
		setSize(700,500);
		setLayout(null);
		setVisible(true);
		setResizable(false);
		ListaSamochodow();
		
					
	}
public void ListaSamochodow(){
	DefaultTableModel tabela = new DefaultTableModel();
	Samochod o = new Samochod();
	ArrayList<Samochod> lista2 = new ArrayList();
	lista2 = o.ListaSamochodow();
	tabela.addColumn("id");
	tabela.addColumn("marka");
	tabela.addColumn("model");
	tabela.addColumn("minSpalMiasto");
	tabela.addColumn("maxSpalMiasto");
	tabela.addColumn("spalanieTrasa");
	tabela.addColumn("czesci");
	tabela.setRowCount(lista2.size());
	int i = 0;
	for(Samochod x: lista2){
		tabela.setValueAt(x.getId(),i, 0);
		tabela.setValueAt(x.getMarka(), i, 0);
		tabela.setValueAt(x.getModel(), i, 0);
		tabela.setValueAt(x.getMinSpalanieMiasto(), i, 0);
		tabela.setValueAt(x.getMinSpalanieMiasto(), i, 0);
		tabela.setValueAt(x.getSpalanieTrasa(), i, 0);
		tabela.setValueAt(x.getCzesci(), i, 0);
		i++;
	}
	tabela_glowna.setModel(tabela);
	}
	

}


Kompiluje się OK, jednak przy włączeniu oknoSamochod, wyskakuje błąd:

> Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: modules.Modul cannot be cast to beans.Samochod
> 	at layout.OknoSamochod.ListaSamochodow(OknoSamochod.java:36)
> 	at layout.OknoSamochod.<init>(OknoSamochod.java:18)
> 	at layout.OknoGlowne$ActionDodajSamochod.actionPerformed(OknoGlowne.java:46)
> 	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
> 	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
> 	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
> 	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
> 	at javax.swing.AbstractButton.doClick(Unknown Source)
> 	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
> 	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
> 	at java.awt.Component.processMouseEvent(Unknown Source)
> 	at javax.swing.JComponent.processMouseEvent(Unknown Source)
> 	at java.awt.Component.processEvent(Unknown Source)
> 	at java.awt.Container.processEvent(Unknown Source)
> 	at java.awt.Component.dispatchEventImpl(Unknown Source)
> 	at java.awt.Container.dispatchEventImpl(Unknown Source)
> 	at java.awt.Component.dispatchEvent(Unknown Source)
> 	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
> 	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
> 	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
> 	at java.awt.Container.dispatchEventImpl(Unknown Source)
> 	at java.awt.Window.dispatchEventImpl(Unknown Source)
> 	at java.awt.Component.dispatchEvent(Unknown Source)
> 	at java.awt.EventQueue.dispatchEvent(Unknown Source)
> 	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
> 	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
> 	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
> 	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> 	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
> 	at java.awt.EventDispatchThread.run(Unknown Source)


Problem zapewne pojawia się w metodzie ListaSamochodzow() w klasie oknoSamochodu.
Nie wiem, o co chodzi.
W bazie danych mam kilka rekordów, ale one nie są wyświetlane...
0

Samochod.java - linia 91

Czy zamiast

lista2.add(o);

nie powinno byc:

lista2.add(jakis);

Celem tej petli jest chyba utworzenie kolekcji obiektow typu Samochod, a Ty w petli dodajesz do listy wciaz ten sam obiekt klasy Modul.

Jesli to jest przyczyna, wystarczy przyzwyczaic sie by zamiast

ArrayList lista2 = new ArrayList();

uzywac

ArrayList<PrzechowywanyTyp> lista2 = new ArrayList<PrzechowywanyTyp>();

Wtedy juz kompilator zglosi blad.

1 użytkowników online, w tym zalogowanych: 0, gości: 1