Avatar billede macpain Nybegynder
07. juli 2005 - 18:18 Der er 2 kommentarer og
1 løsning

Brug af egne elementer i JTable

Sidder lige her og leger med at putte mine egne objekter(Entity) ind i en JTable istedet for at bruge den gamle:

String columnNames[] & String dataValues[][]

syntes at have fundet en løsning men den virker mig noget dramatsk i forhold til hva jeg ville forvente
http://www.javareference.com/jrexamples/viewexample.jsp?id=17

kan det passe der skal så meget til? Det må kunne gøres lettere!!
Avatar billede mikkelbm Nybegynder
07. juli 2005 - 18:23 #1
Det du skal være opmærksom på i det eksempel er:

public class SimpleTableModel extends AbstractTableModel

Her viser de hvordan du laver din egen TableModel. Og det er den eneste måde at gøre det på. Når man lige fanger fidusen er det utrolig dejligt at arbejde med.
Avatar billede mikkelbm Nybegynder
07. juli 2005 - 18:25 #2
Jeg lavede på et tidspunkt følgende eksempel, som faktisk gør det samme:

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

public class JTableTest extends JFrame
{
    private MyTableModel model = new MyTableModel();
    private JTable table = new JTable (model);
   
    public JTableTest()
    {
        this.setSize(400, 400);
        this.getContentPane().add(new JScrollPane (table), BorderLayout.CENTER);
       
        for (int i = 0; i<10; i++)
            model.addTableElement(new MyObject (i, "Navn: " + i));
    }
   
    private class MyObject
    {
        int id;
        String name;
       
        public MyObject (int id, String name)
        {
            this.id = id;
            this.name = name;
        }
       
        public int getId()
        {
            return id;
        }
       
        public String getName ()
        {
            return name;
        }
       
        public void setId (int id)
        {
            this.id = id;
        }
       
        public void setName (String name)
        {
            this.name = name;
        }
    }
       
    private class MyTableModel extends AbstractTableModel
    {
        private String[] columns = new String[] {"Id", "Navn"};
        private ArrayList data;

        public MyTableModel()
        {
            data = new ArrayList();
        }
       
        public int getColumnCount()
        {
            return columns.length;
        }
       
        public int getRowCount()
        {
            return data.size();
        }
       
        public String getColumnName(int column)
        {
            return columns[column];
        }
       
        public MyObject getValueAt(int row)
        {
            return (MyObject)data.get(row);
        }
       
        public Object getValueAt(int row, int column)
        {
            MyObject element = (MyObject) data.get(row);
       
            switch (column)
            {
                case 0: return String.valueOf(element.getId());
                case 1: return element.getName();
            }
            return null;
        }
       
        public Class getColumnClass(int column)
        {
            return getValueAt(0, column).getClass();
        }
       
        public boolean isCellEditable(int row, int column)
        {
            return true; // alle celler er editerbare
        }
       
        public void setValueAt(Object value, int row, int column)
        {
            switch (column)
            {
                case 0: ((MyObject) data.get(row)).setId(Integer.parseInt(value.toString())); break;
                case 1: ((MyObject) data.get(row)).setName(value.toString()); break;
            }
            fireTableCellUpdated(row, column);
        }
       
        public void addTableElement(MyObject element)
        {
            data.add(element);
            fireTableRowsInserted(data.size(), data.size());
        }
       
        public void removeTableElement(int index)
        {
            if (! (index == -1))
            {
                data.remove(index);
                fireTableRowsDeleted(index, index);
            }
        }
       
        public void removeAll()
        {
            int slut = data.size();
            data.clear();
            fireTableRowsDeleted(0, slut);
        }
    }
   
    public static void main (String[] args)
    {
        new JTableTest().setVisible(true);
    }
}
Avatar billede macpain Nybegynder
07. juli 2005 - 22:22 #3
Ja, så må det jo være måden at gøre det på!!!

Takker
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