Avatar billede eikhorsholm Nybegynder
07. november 2006 - 23:39 Der er 11 kommentarer og
1 løsning

Tilføj rækker i JTabel via vector.

Ligesom man med en JList kan bruge funktionen:
jList.setListData(vector);

Er det så ikke muligt, at lave noget lign. for en JTabel, hvor den skal tage en vektor ligeledes og så lave nye rækker for hvert element i vektoren?
Avatar billede eikhorsholm Nybegynder
08. november 2006 - 00:00 #1
Jeg har prøvet med setDataVector, men den tager "columnIdentifiers" som jeg ikke lige kan hive ud nogen steder eller?
Avatar billede winners79 Nybegynder
08. november 2006 - 00:03 #2
Det man gør er at oprette en TableModel som man smider i:

private JTable talOversigtTable = null;

talOversigtTable.setModel(new MinTableModel(talListe));


import java.util.List;

import javax.swing.table.AbstractTableModel;




@SuppressWarnings("serial")
public class MinTableModel extends AbstractTableModel {
   
    private boolean DEBUG = false;
    private String[] columnNames = { "Nummer", "Tallet"};
    private Object[][] data;
    private int [] tal;
   

    public KSVTableModel(Vector<Integer> talListe) {
        data = new Object[talListe.size()][columnNames.length]
        for (int position=0;position< talListe.length;position++) {
            int antal=Statistik.AntalKunderMedKSV(ksver);
            data[position][0] = new Integer(position+1);
            data[position][1]= talListe.get(position);
}
    }
   

   
    public int getRowCount() {

        return data.length;
    }

    public int getColumnCount() {

        return columnNames.length;
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
        return data[row][col];
    }


    @SuppressWarnings("unchecked")
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    public boolean isCellEditable(int row, int col) {
        //Note that the data/cell address is constant,
        //no matter where the cell appears onscreen.
       
            return true;
       
    }



    @Override
    public String toString() {
        String dataString=data[0][0]+ " "+ data[0][1]+" , ";
        for (int position=1;position<data.length;position++){
            dataString= dataString+ data[position][0]+ " "+ data[position][1]+" , ";
        }
       
        return dataString;
    }

   






}
Avatar billede eikhorsholm Nybegynder
08. november 2006 - 00:10 #3
Øh... :-|

Jeg har en:
((javax.swing.table.DefaultTableModel)table1.getModel()).setDataVector(vector, ???)

De tre ? er fordi jeg ikke ved, hvorledes/hvad columnIdentifiers er, hvorledes jeg finder det frem osv.

Jeg vil blot have min JTable fyldt ud med rækker indeholdene Objecter (som har en toString-funktion) fra min Vector.
Så jeg kan bruge getSelectedRow på min JTable og derefter caste den som mit Object, som jeg så kan benytte.
Avatar billede winners79 Nybegynder
08. november 2006 - 00:24 #4
DefaultTableModel(Vector data, Vector columnNames)

Column Names er nok navnet på hver Column, så lav en vector med Strings og tilføj navnene og...
Avatar billede eikhorsholm Nybegynder
08. november 2006 - 00:31 #5
Det virker ikke! :-(
Avatar billede winners79 Nybegynder
08. november 2006 - 01:24 #6
ok 2 metoder:

Vectoren er jo angivet som en Vector med Vectorer i:

        Vector<Vector<String>> liste = new Vector<Vector<String>>();
       
        Vector<String> række1 = new Vector<String>();
        Vector<String> række2 = new Vector<String>();
       
        række1.add("test1a");
        række1.add("test1b");
        række2.add("test2a");
        række2.add("test2b");

        liste.add(række1);
        liste.add(række2);

        Vector<String> columnNames = new Vector<String>();

        columnNames.add("1");
        columnNames.add("2");
       
        JFrame jFrame = new JFrame();
        DefaultTableModel dtm = new DefaultTableModel(liste,columnNames);
   
        JTable jtable = new JTable(dtm);
        jFrame.add(jtable);
        jFrame.setVisible(true);
        jFrame.pack();

____________________________________________________________________________
Eller du kan bruge Arrays:

JFrame jFrame = new JFrame();
DefaultTableModel dtm = new DefaultTableModel(new String[][] {                { "1", "2", "3" }, { "4", "5", "6" } }, new String[] { "Names",
                "In", "Order" });
   
JTable jtable = new JTable(dtm);
jFrame.add(jtable);
jFrame.setVisible(true);
jFrame.pack();
Avatar billede hacked Nybegynder
08. november 2006 - 05:07 #7
Her er et forsimplet eksempel på hvordan det kan gøres.
Der tages forbehold for mindre fejl.

import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.*;

public class Test extends JFrame {
    private JTable jTable;
    private TableModel tableModel;

    public Test() {
        super("JTable Example");
        tableModel = new TableModel(getDummyData());
        jTable = new JTable(tableModel);
        jTable.setColumnSelectionAllowed(false);
        jTable.setRowSelectionAllowed(true);
        jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        JScrollPane scrollPane = new JScrollPane(jTable);
        getContentPane().add(scrollPane);
    }

    private Vector getDummyData() {
        Vector dummyData = new Vector();
        dummyData.addElement(new Bruger(new Integer(1), "Lea", "Organa"));
        dummyData.addElement(new Bruger(new Integer(2), "Luke", "Skywalker"));
        dummyData.addElement(new Bruger(new Integer(3), "JarJar", "Binks"));
        dummyData.addElement(new Bruger(new Integer(4), "Lea", "Organa"));
        dummyData.addElement(new Bruger(new Integer(5), "Luke", "Skywalker"));
        dummyData.addElement(new Bruger(new Integer(6), "JarJar", "Binks"));
        dummyData.addElement(new Bruger(new Integer(7), "Lea", "Organa"));
        dummyData.addElement(new Bruger(new Integer(8), "Luke", "Skywalker"));
        dummyData.addElement(new Bruger(new Integer(9), "JarJar", "Binks"));
        dummyData.addElement(new Bruger(new Integer(10), "Lea", "Organa"));
        dummyData.addElement(new Bruger(new Integer(11), "Luke", "Skywalker"));
        dummyData.addElement(new Bruger(new Integer(12), "JarJar", "Binks"));
        dummyData.addElement(new Bruger(new Integer(13), "Lea", "Organa"));
        dummyData.addElement(new Bruger(new Integer(14), "Luke", "Skywalker"));
        dummyData.addElement(new Bruger(new Integer(15), "JarJar", "Binks"));
        dummyData.addElement(new Bruger(new Integer(16), "Lea", "Organa"));
        dummyData.addElement(new Bruger(new Integer(17), "Luke", "Skywalker"));
        dummyData.addElement(new Bruger(new Integer(18), "JarJar", "Binks"));
        return dummyData;
    }

    public static void main(String[] arg) {
        Test m = new Test();
        m.setVisible(true);
        m.setSize(new Dimension(600, 300));
        m.validate();
    }
}

class TableModel extends AbstractTableModel {
    public static final int ID_COL = 0;
    public static final int Firstname_COL = 1;
    public static final int Surname_COL = 2;

    public String[] m_colNames = { "ID", "Firstname", "Surname" };
    public Class[] m_colTypes = { Integer.class, String.class, String.class };

    private Vector dataVector;

    public TableModel(Vector dataVector) {
        super();
        this.dataVector = dataVector;
    }

    public int getColumnCount() {
        return m_colNames.length;
    }

    public int getRowCount() {
        return dataVector.size();
    }

    public void setValueAt(Object value, int row, int col) {
       
        Bruger bruger = (Bruger)(dataVector.elementAt(row));
        JOptionPane.showMessageDialog(null,"Old values: "+bruger.toString(),"Message",JOptionPane.PLAIN_MESSAGE);
        switch (col) {
            case ID_COL:
                bruger.setID((Integer)value);
                break;
            case Firstname_COL:
                bruger.setFirstname((String)value);
                break;
            case Surname_COL:
                bruger.setSurname((String)value);
                break;
        }
        JOptionPane.showMessageDialog(null,"New values: "+bruger.toString(),"Message",JOptionPane.PLAIN_MESSAGE);
    }

    public boolean isCellEditable(int row, int col) {
        switch (col) {
            case 0: //ID
                return false;
            case 1: //Firstname
                return true;
            case 2: //Surname
                return true;
            default:
                return false;
        }
    }

    public String getColumnName(int col) {
        return m_colNames[col];
    }

    public Class getColumnClass(int col) {
        return m_colTypes[col];
    }

    public Object getValueAt(int row, int col) {
        Bruger bruger = (Bruger)(dataVector.elementAt(row));
        switch (col) {
        case ID_COL:
            return bruger.getID();
        case Firstname_COL:
            return bruger.getFirstname();
        case Surname_COL:
            return bruger.getSurname();
        }
        return null;
    }
}

class Bruger {
    private Integer id;
    private String firstname;
    private String surname;

    public Bruger(Integer id, String firstname, String surname) {
        this.id = id;
        this.firstname = firstname;
        this.surname = surname;
    }

    public Integer getID() {
        return this.id;
    }

    public void setID(Integer id) {
        this.id = id;
    }

    public String getFirstname() {
        return this.firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getSurname() {
        return this.surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }
   
    public String toString() {
        return id + " " + firstname + " " +surname; 
    }
}
Avatar billede hacked Nybegynder
08. november 2006 - 14:41 #8
winners79 >> Er det dig der har givet mig karma?
Avatar billede winners79 Nybegynder
08. november 2006 - 15:05 #9
nej ved ikke helt hvordan det med karma virker, sorry
Avatar billede eikhorsholm Nybegynder
09. november 2006 - 21:18 #10
winners79 -> LAver du ikke et svar :-)
TAK!!!
Avatar billede hacked Nybegynder
09. november 2006 - 22:15 #11
Af ren nysgerrighed kunne du så bruge noget fra mit eksempel? :)
Avatar billede winners79 Nybegynder
09. november 2006 - 23:00 #12
selv tak:)
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