Problem mit dem Füllen einer JTable

Schnacki

Mitglied
Hallo,
ich habe ein Problem mit einer JTable.
Ich möchte ein Adressbuch in JAva schreiben. Da kann der Besucher Vor- und Nachnamen und Telefonnummer eingeben, die dann als Objekt in einer ArrayList gespeichert werden.
Das klappt auch alles. Doch dann möchte ich die Daten in einer Tabelle anzeigen lassen.
da weiss ich nicht wie ich das machen soll.
Habe schon versucht die arraylist als array zu casten, aber das ging auch nicht.
Könnt ihr mir sagen wie ich das machen soll, oder eine Internetseite geben, worauf man das lesen kann?
Hier ist der Code:
Code:
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

//Hauptfenster
public class Adressbuch extends JFrame implements ActionListener {
    static JTextArea adressen;
    public Adressbuch(){
        
        JMenuBar menubar = new JMenuBar();
        menubar.setBounds(0,0,300,20);
        menubar.setBackground(Color.ORANGE);
        
        JMenu datei= new JMenu("Datei");
        datei.setBackground(Color.ORANGE);
        JMenuItem close = new JMenuItem("Schliessen");
        close.setBackground(Color.ORANGE);
        datei.add(close);
        JMenu buch= new JMenu("Adressbuch");
        buch.setBackground(Color.ORANGE);
        JMenuItem neu = new JMenuItem("Neuer Eintrag");
        neu.setBackground(Color.ORANGE);
        neu.addActionListener(this);
        JMenuItem suche = new JMenuItem("Suche");
        suche.setBackground(Color.ORANGE);
        suche.addActionListener(this);
        buch.add(neu);
        buch.addSeparator();
        buch.add(suche);
        menubar.add(datei);
        menubar.add(buch);
        
        TableModel mtm = new QuadratTableModel();

        JTable tabelle = new JTable( mtm );
        tabelle.setBounds(0,20,300,300);
        
      
        setLayout(null);
        setVisible(true);
        setSize(300,300);
        add(menubar);
        add(tabelle);
    }
    public void actionPerformed(ActionEvent ev) {
        if(ev.getActionCommand()=="Neuer Eintrag") {
            new neuerEintrag();
        }
        if(ev.getActionCommand()=="Schliessen") {
            setVisible(false);
        }
    }
}
//Das ist der Dialog, der geöffnet wird, wenn der Benutzer einen neuen Kontakt hinzufügen möchte.
class neuerEintrag extends JDialog implements ActionListener {
    JTextField vorname, nachname, telefon;
    JButton eintragen;
   
    static ArrayList<Adresse> adressliste = new ArrayList<Adresse>();
    public neuerEintrag() {
        setLayout(null);
        
        JLabel vn= new JLabel("Vorname:");
        vn.setBounds(3,5,80,25);
        add(vn);
        
        vorname = new JTextField();
        vorname.setBounds(80,5,100,25);
        add(vorname);
        
        JLabel nn= new JLabel("Nachname:");
        nn.setBounds(3,30,80,25);
        add(nn);
        
        nachname = new JTextField();
        nachname.setBounds(80,30,100,25);
        add(nachname);
       
        JLabel t= new JLabel("Telefon:");
        t.setBounds(3,55,80,25);
        add(t);
        
        telefon = new JTextField();
        telefon.setBounds(80,55,100,25);
        add(telefon);
        
        eintragen = new JButton("Eintragen");
        eintragen.setBounds(3,100,100,25);
        eintragen.addActionListener(this);
        add(eintragen);
       
        setVisible(true);
        
        setSize(200,160);
        setLocation(50,50);
       
    }
    public void actionPerformed(ActionEvent ev) {
        Adresse adr= new Adresse(vorname.getText(),nachname.getText(),telefon.getText());
        adressliste.add(adr);
        dispose();
        setVisible(false);
    }
}

class QuadratTableModel extends AbstractTableModel {
    public int getRowCount() {
        return 17;
    }
    public int getColumnCount() {
        return 3;
    }
    public Object getValueAt(int row, int column) {
       //Hier weiß ich nicht weiter.
    }
}


class Adresse {
    String telefon, vorname, nachname;
    public Adresse(String vn, String nn, String tn) {
        telefon=tn;
        vorname=vn;
        nachname=nn;
    }
}
 
Doch dann möchte ich die Daten in einer Tabelle anzeigen lassen.
da weiss ich nicht wie ich das machen soll.
Habe schon versucht die arraylist als array zu casten, aber das ging auch nicht.
Könnt ihr mir sagen wie ich das machen soll, oder eine Internetseite geben, worauf man das lesen kann?

Auf der Seite des SWT-Projektes gibt es einige Snippets, die sehr schön den Umgang mit Tabellen zeigen
 
eine ArrayList ist ja auch nur ein Container, du musst eben die Daten aus dem Container rausholen und dem Table übergeben, also nen ListIterator instanzieren ;)
 
public Object getValueAt(int row, int column) {
public Object getValueAt(int row, int col) {
Address address = addressliste.get(row);

switch (col) {
case 0:
return address.getVorname;
case 1:
return address.getNachname;
// usw.

default:
return null;
}
}

Die soltest die Klasse Adress um die entsprechenden Getter-/Setter-Methoden ergänzen. Ferner bietet es sich an, nicht die Tabelle auf den GUI zu bringen, sondern diese in eine JScrollPane einzubetten und die Pane dann auf dem GUI platzieren. So hast Du bei Bedarf entsprechende Srcoll-Balken.

Gruß,

JOST
 
Zurück