Avatar billede chr.kj Nybegynder
17. december 2007 - 18:29 Der er 6 kommentarer og
1 løsning

Fra database til jList?

Jeg har nogle tabeller som jeg gerne vil have hentet ind i min jList, men jeg kan ikke få det til at lykkes.

Jeg bruger følgende kode til at hente data fra min DB, men jeg kan ikke få disse data over i min jList.

        String varenummer, varenavn, varebeskrivelse, lagerAntal, salgspris, lagerPlacering;
        String sqlUdtryk = "SELECT * from varelager";
        System.out.println(sqlUdtryk);
        try
        {
            con = DriverManager.getConnection("jdbc:odbc:lagerdb","","");
            stmt = con.createStatement();
            svar = stmt.executeQuery(sqlUdtryk);
            svar.next();
           
            varenummer = svar.getString("varenummer");
            varenavn = svar.getString( "varenavn" );
            varebeskrivelse = svar.getString( "varebeskrivelse" );
            lagerAntal = svar.getString( "lagerAntal" );
            salgspris = svar.getString( "salgspris"  );
            lagerPlacering = svar.getString( "lagerplacering" );
                   
            /** lageret = (Lager) getVarer();
            Skal på en eller anden måde få data over i min ArrayListe, Hvordan vides ikke...
**/

            jListOversigt.setListData( lageret.getVarer().toArray() );
           

            stmt.close();
            con.close();
        }
        catch(SQLException e)
        {
            System.out.println("SQL fejl : " + e.getCause());
            System.out.println("SQL fejl : " + e.getMessage());
        }

Jeg har kunnet finde frem til at man faktisk råder en til at lave det med en jTable, men jeg har endnu ikke rodet med en jTable og ved derfor ikke hvordan den virker, derfor bliver det til en jList p.t. ;o)
Avatar billede _carsten Nybegynder
17. december 2007 - 21:53 #1
Det holder bare ikke med en jlist, her er et lille eksempel med en JTable

import java.util.Vector;
import javax.swing.table.DefaultTableModel;

public class DB_Table extends javax.swing.JFrame {
   

    public DB_Table() {
        initComponents();
    }
   

    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        table = new javax.swing.JTable();
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        table.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Varenr", "Varenavn", "Beskrivelse", "Antal", "Salgspris", "Lager"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Double.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        jScrollPane1.setViewportView(table);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jButton1.setText("Add Row");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addToTable(evt);
            }
        });
        jPanel1.add(jButton1);

        jButton2.setText("Delete Row");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeFromTable(evt);
            }
        });
        jPanel1.add(jButton2);

        getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_START);

        pack();
    }

    private void addToTable(java.awt.event.ActionEvent evt) {
        int rows = table.getRowCount();
       
        Vector v = new Vector();
        v.add(new Integer(rows));
        v.add("vare " + rows);
        v.add("Dette er vare " + rows);
        v.add(new Integer(2 * rows));
        v.add(new Double(10 * rows));
        v.add("Ligger i hal " + rows);
       
        DefaultTableModel model = (DefaultTableModel)table.getModel();
        model.addRow(v);
    }

    private void removeFromTable(java.awt.event.ActionEvent evt) {
        int[] selected = table.getSelectedRows();
       
        DefaultTableModel model = (DefaultTableModel)table.getModel();
       
        for(int i = selected.length; i > 0; i-- ){
            model.removeRow(selected[i-1]);
        }
    }
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new DB_Table().setVisible(true);
            }
        });
    }
   

    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable table;
}
Avatar billede chr.kj Nybegynder
17. december 2007 - 22:06 #2
Ok.. Jeg kigger på det.. Takker.

En helt anden ting.. Jeg har ikke arbejdet med Vector endnu, men er det det samme som en ArrayList og kan jeg bytte Vector ud med min ArrayList så Vector v = new Vector(); bliver til OpretVare vare = new OpretVare() ??
Avatar billede _carsten Nybegynder
17. december 2007 - 22:33 #3
Nej det kan du ikke.

En Vector er faktisk noget i stil med et Array[] / ArrayList, med den store forskel at et Array skal defineres med en fast størrelse og kan ikke ændres senere, en Vector kræver ingen forudefineret størrelse, du kan blive ved med at hælde på, lige som du gør med en ArrayList

Det jeg gør er faktisk det samme, altså
Vector v = new Vector();  // == varen og indsætter varen i tabellen

Du laver bare en Vector pr. vare
Avatar billede chr.kj Nybegynder
17. december 2007 - 23:12 #4
OK. Tak for svaret og endnu engang tak for hjælpen.

Smid lige et svar :o)

Jeg har lige et andet spørgsmål, som jeg håber du evt. kan svare på.. (Smider gerne nogle flere point ind hvis du ønsker det.)

Jeg har en søge metode der ser sådan ud:

    public KasseInterface findVare( String varenummer ) {
        System.out.println("finder vare for '" + varenummer + "'");
        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer() == varenummer )
                System.out.println("fandt vare '" + elem + "'");
                return elem;
            }
            System.out.println("fandt ikke nogen vare!!!");
            return null;
        } 

Jeg skal kunne søge på varenummer og navn.. P.t. er det kun varenummeret jeg kan søge på. I mun gui henter jeg min liste ind i et jList felt og lager mit søgekald sådan:

OpretVare vare = (OpretVare) lageret.findVare( jTextFieldVarenummer.getText() );       
       
        jTextFieldVarenummer.setText( vare.getVarenummer() );
        jTextFieldVarenavn.setText( vare.getVarenavn() );
        jTextFieldBeskrivelse.setText( vare.getVarebeskrivelse() );
        jTextFieldLagerAntal.setText( String.valueOf( vare.getLagerAntal() ));
        jTextFieldSalgspris.setText( String.valueOf( vare.getSalgspris() ));
        jComboBoxLagerPlacering.setSelectedItem( vare.getLagerPlacering() );

Den henter tingene fint dok ind, men det er altid nummer et i min liste der bliver hentet ind. Jeg kan ikke forstå hvorfor den gør det og ikke køber alle elementerne igennem indtil den finder det korrekte varenummer.

Anyways.. Smid et svar, for du har helt klart fortjent pointene :o)
Avatar billede _carsten Nybegynder
18. december 2007 - 10:43 #5
Du gemmer varenr som en String

Ret til:

        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer().equals(varenummer) )
                System.out.println("fandt vare '" + elem + "'");
                return elem;
            }
            System.out.println("fandt ikke nogen vare!!!");
            return null;
        }
Avatar billede _carsten Nybegynder
18. december 2007 - 10:43 #6
Og et svar
Avatar billede chr.kj Nybegynder
18. december 2007 - 15:45 #7
Takker for det.

Har prøvet med den kode, men den vise alligevel det første element i min liste?

Fatter det ikke?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester