Generowanie JTable

Odpowiedz Nowy wątek
Cichy89
2010-10-28 15:35
Cichy89
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:mysql://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...

Pozostało 580 znaków

VGT
2010-10-29 02:16
VGT

Rejestracja: 10 lat temu

Ostatnio: 2 lata temu

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.


Pozostało 580 znaków

Odpowiedz

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