# ArrayList in JTable



## blumenpeter (1. Feb 2010)

Hi, 

habe mir von Beni die FAQ durchgeschaut, damit ich ungefähr weiß, was das JTable ist, bzw was es kann.

Habe mich nun entschlossen meine fertige Bibliothek so umzuschreiben, dass das Ausgeben der Bibliothek nicht mher im JTextArea geschieht, sondern geordnet in einem JTable steht.

Habe auch über die SuFu ein wenig geschaut, aber nicht wirklich was verstanden.

Ich Liste das Array(ArrayList) auf per:


```
public void listeZeigen(){

                for(int i=0; i<DB1.disk.size(); i++)
                {
                        text.append(i+":\n"+DB1.disk.get(i).toString());
                }
}
```

wie kann ich jetzt die einzelnen variablen abrufen?

danke schonmal
blumenpeter

EDIT:
habe ein wenig weiter gesucht und folgendes gefunden:
List Table Model  Java Tips Weblog

kann ich bei dem Beispiel Daten: 

```
Object[] r1 = {"Homer", "Simpson", new Integer(40)};
Object[] r2 = {"Marge", "Simpson", new Integer(35)};
```

nicht irgendwie per schleife arbeiten, und das einfügen:?


```
DB1.disk.get(i).toString()
```


----------



## ARadauer (1. Feb 2010)

> wie kann ich jetzt die einzelnen variablen abrufen?


welche variablen??

macht natürlich null sinn, einen haufen Text in eine Textarea zu werfen und dann den Inhalt in eine Tabelle zu stopfen..

Mach dir Table Model, das von Default Table Model erbt (gibt ein sehr gutes Beispiel in den FAQ).
die getValueAt(int row, int column) Methode des Models fordert dann die Werte für jedes FEld.. und da hohlst du dir einfach mit 
DB1.disk.get(row) dein Objekt und 
für jede column gibts du in einem switch einen wert der entsprechenden Variable zurück...


btw.. ich würde toString eigentlich nicht für Ausgaben die der Benutzer sieht benutzen....




> Habe auch über die SuFu ein wenig geschaut, aber nicht wirklich was verstanden.


 tja


----------



## blumenpeter (1. Feb 2010)

Hi,

das Problem ist, das ich nicht weiß wie ich dieses einfügen kann bei mir.

ich habe eine Menu klasse, in der ich meine GUI erstelle und benutze. Diese greift dann auf 3 andere Klassen (CD, DVD und BluRay -> alle 3 erben von Class Disk) zu. Als letzte Class habe ich die Database. Hier wird die ArrayList erstellt.

Menu:

```
class Menu implements ActionListener, Serializable {

        JFrame          frame1,frame2;
        JTextArea       text;
        JTable          table;
        JPanel          panel,panel2;
        JButton         b1,b2,b3,b4,b5,b6,b7,b8,b9;
        JScrollPane     scroller;
        JTextField      tf1;
        JProgressBar    laden;

        int         test, x,z,zz , m, k, sicher,laenge, anzahl, anzahlc,arraydelete,arraygroese;
        String      addi, c, cp, d, t, r, kuen;
        String titel1;

        Database DB1 = new Database();

         String[] titles = new String[]{ "Titel", "Regisseur", "Künstler", "Anzahl", "Länge" };// für JTable



        public void los() {

                frame1 = new JFrame();
                frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame1.setBackground(Color.WHITE);
                panel = new JPanel();
                panel2 = new JPanel();
                panel.setBackground(Color.WHITE);
                panel2.setBackground(Color.WHITE);
                laden = new JProgressBar();
                laden.setMaximum(100);
                laden.setMinimum(0);
                laden.setValue(0);
                b1 = new JButton("   1  ");
                b1.addActionListener(this);
                b1.setAlignmentX(JButton.CENTER_ALIGNMENT);
                b1.setMaximumSize(new Dimension(Integer.MAX_VALUE, b1.getMaximumSize().height));
                b2 = new JButton("   2  ");
                b2.addActionListener(this);
                b2.setAlignmentX(JButton.CENTER_ALIGNMENT);
                b2.setMaximumSize(new Dimension(Integer.MAX_VALUE, b2.getMaximumSize().height));
                b3 = new JButton("   3  ");
                b3.addActionListener(this);
                b3.setAlignmentX(JButton.CENTER_ALIGNMENT);
                b3.setMaximumSize(new Dimension(Integer.MAX_VALUE, b3.getMaximumSize().height));
                b4 = new JButton("   4  ");
                b4.addActionListener(this);
                b4.setAlignmentX(JButton.CENTER_ALIGNMENT);
                b4.setMaximumSize(new Dimension(Integer.MAX_VALUE, b4.getMaximumSize().height));
                b5 = new JButton("  Ja ");
                b5.addActionListener(this);
                b5.setAlignmentX(JButton.CENTER_ALIGNMENT);
                b5.setMaximumSize(new Dimension(Integer.MAX_VALUE, b5.getMaximumSize().height));
                b6 = new JButton("Nein");
                b6.addActionListener(this);
                b6.setAlignmentX(JButton.CENTER_ALIGNMENT);
                b6.setMaximumSize(new Dimension(Integer.MAX_VALUE, b6.getMaximumSize().height));
                b7 = new JButton("Speicehrn");
                b7.addActionListener(this);
                b7.setAlignmentX(JButton.CENTER_ALIGNMENT);
                b7.setMaximumSize(new Dimension(Integer.MAX_VALUE, b7.getMaximumSize().height));
                b8 = new JButton("Laden");
                b8.addActionListener(this);
                b8.setAlignmentX(JButton.CENTER_ALIGNMENT);
                b8.setMaximumSize(new Dimension(Integer.MAX_VALUE, b8.getMaximumSize().height));
                b9 = new JButton("   5  ");
                b9.addActionListener(this);
                b9.setAlignmentX(JButton.CENTER_ALIGNMENT);
                b9.setMaximumSize(new Dimension(Integer.MAX_VALUE, b9.getMaximumSize().height));
                b9.setVisible(false);


                panel.add(b1);
                panel.add(b2);
                panel.add(b3);
                panel.add(b4);
                panel.add(b9);
                panel.add(b5);
                panel.add(b6);
                panel.add(b7);
                panel.add(b8);
                text = new JTextArea(10, 20);
                text.setLineWrap(true);
                tf1 = new JTextField(c);
                tf1.setText("Hier eingabe Möglich!");
                tf1.selectAll();
                tf1.requestFocus();
                tf1.addActionListener(this);
                tf1.setMaximumSize(new Dimension(Integer.MAX_VALUE, tf1.getMaximumSize().height));
                scroller = new JScrollPane(text);
                scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
                scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
                panel2.add(scroller);
                panel2.add(laden);
                panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
                panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
                frame1.getContentPane().add(BorderLayout.WEST, panel);
                frame1.getContentPane().add(BorderLayout.EAST, panel2);
                frame1.getContentPane().add(BorderLayout.SOUTH, tf1);
                frame1.setSize(350, 500);
                frame1.setVisible(true);

                text.append("Bitte Loggen Sie sich zunächst ein! \n");
                m=1;
        
        }

        public void anfangsMenu() {

                text.setText("");
                laden.setValue(100);
                text.append("\n#############\n");
                text.append("# Willkommen #\n");
                text.append("##############\n");
                scroller.getAutoscrolls();
                text.append("\nWollen Sie das Script\n");
                text.append("Starten? JA oder NEIN \n");
                k = 1;
        
        }



                public void hauptMenu(){


                text.setText("");
                if(DB1.disk.size() == 0 && z==999){

                        text.append("######Hauptmenu######\n#####################\n# x = xx xxxxxxxx" +
                            "\n# x = xxx xxxxxxxxxx\n# 3 = xxxxxx xxxxxxxx\n#" +
                            "\n# 4 = Bibliothek anzeigen\n#####################");
                        scroller.getAutoscrolls();
                        b9.setVisible(false);
                        b1.setEnabled(false);
                        b2.setEnabled(false);
                        b3.setEnabled(false);
                        b8.setEnabled(false);
                        zz=9999;
                }
                else if(DB1.disk.size() == 0 && z==888){

                        text.append("######Hauptmenu######\n#####################\n# 1 = CD erstellen" +
                            "\n# 2 = DVD erstellen\n# 3 = BluRay erstellen\n#" +
                            "\n# 4 = Bibliothek anzeigen\n#####################");
                        scroller.getAutoscrolls();
                        b9.setVisible(false);
                }
                else if(DB1.disk.size() > 0 && z == 888){
                        text.append("######Hauptmenu######\n#####################\n# 1 = CD erstellen" +
                            "\n# 2 = DVD erstellen\n# 3 = BluRay erstellen" +
                            "\n# 4 = Bibliothek anzeigen\n# 5 = Media löschen\n#####################");
                        scroller.getAutoscrolls();
                        b9.setVisible(true);

                }
        }



        public void cdErstellen(){

                anzahlc = 0;
                //System.out.println("cdErstellen");

                t = JOptionPane.showInputDialog("Titel der CD angeben", "TITEL");
                kuen = JOptionPane.showInputDialog("Künstler angeben", "KÜNSTLER");

                while(anzahlc<2){
                        try{
                                anzahl = Integer.parseInt(JOptionPane.showInputDialog("die Anzahl der Titel angeben", "ANZAHL"));
                                anzahlc = 2;

                        }
                        catch(Exception e){
                                text.append("Bitte geben Sie bei \"die Anzahl der Titel angeben\" " +
                                    "\nnur Zahlen ein");
                                anzahlc = 0;
                        }
                }

                while(anzahlc<3){
                        try{
                                laenge = Integer.parseInt(JOptionPane.showInputDialog("Länge der CD in Minuten", "LÄNGE"));
                                anzahlc = 3;
                        }
                        catch(Exception e){
                                text.append("Bitte geben Sie bei \"Länge der CD\" " +
                                    "\nnur Zahlen ein");
                                anzahlc = 0;
                        }
                }


                DB1.erfasseDisk(new CD(t, kuen, anzahl, laenge));
                hauptMenu();

        }


        public void dvdErstellen(){

                anzahlc = 0;
                //System.out.println("dvdErstellen");

                t = JOptionPane.showInputDialog("Titel der DVD angeben", "TITEL");
                r = JOptionPane.showInputDialog("Regisseur angeben", "REGISSEUR");
                
                while(anzahlc<4){
                        try{
                                laenge = Integer.parseInt(JOptionPane.showInputDialog("Länge der DVD in Minuten", "LÄNGE"));
                                anzahlc = 4;

                        }
                        catch(Exception e){
                                text.append("Bitte geben Sie bei \"Länge der DVD\" " +
                                          "\nnur Zahlen ein");
                                anzahlc = 0;
                        }
                }
                
                DB1.erfasseDisk(new DVD(t,r, laenge));
                hauptMenu();
        }

        public void blurayErstellen(){

                anzahlc = 0;
                //System.out.println("blurayErstellen");

                t = JOptionPane.showInputDialog("Titel der BluRay angeben", "TITEL");
                r = JOptionPane.showInputDialog("Regisseur angeben", "REGISSEUR");

                while(anzahlc<5){
                        try{
                                laenge = Integer.parseInt(JOptionPane.showInputDialog("Länge der BluRay in Minuten", "LÄNGE"));
                                anzahlc = 5;

                        }
                        catch(Exception e){
                                text.append("Bitte geben Sie bei \"Länge der BluRay\" " +
                                          "\nnur Zahlen ein");
                                anzahlc = 0;
                        }
                }

                DB1.erfasseDisk(new BluRay(t,r, laenge));
                hauptMenu();
        }

    

        public void listeZeigen(){

                for(int i=0; i<DB1.disk.size(); i++)
                {
                        text.append(i+":\n"+DB1.disk.get(i).toString());
                }
                //Tablebauen();
        }
   
        public void arrayLöschung(){

                listeZeigen();
                DB1.disk.remove(arraydelete = Integer.parseInt(JOptionPane.showInputDialog("Geben Sie die Nummer der \nDsik an", "NUMMER")));
                text.append("Eintrag erfolgreich GELÖSCHT");

                hauptMenu();
                listeZeigen();
        }

    

        public void actionPerformed(ActionEvent ev) {

                try {
                        if (ev.getSource() == b1) {
                                text.append("Sie haben \"1\" gewählt, sind Sie sicher? \n");
                                sicher = 1;
                        }

                } catch (Exception e) {
                        text.append("Fehler im Code!\n" + e);
                }

                try {
                        if (ev.getSource() == b2) {
                                text.append("Sie haben \"2\" gewählt, sind Sie sicher? \n");
                                sicher = 2;
                        }
                } catch (Exception e) {
                        text.append("Fehler im Code!\n" + e);
                }

                try {
                        if (ev.getSource() == b3) {
                                text.append("Sie haben \"3\" gewählt, sind Sie sicher? \n");
                                sicher = 3;
                }
                } catch (Exception e) {
                        text.append("Fehler im Code!\n" + e);
                }

                try {
                        if (ev.getSource() == b4) {
                                text.append("Sie haben \"4\" gewählt, sind Sie sicher? \n");
                                sicher = 4;
                }
                } catch (Exception e) {
                        text.append("Fehler im Code!\n" + e);
                }


                try {
                        if (ev.getSource() == b5 && k == 1) {
                
                                 text.append("JA \n");
                                 k =2;
                                 hauptMenu();
                        }
                        else if(ev.getSource() == b5 && sicher ==1){

                                cdErstellen();
                                sicher = 100;
                        }
                        else if(ev.getSource() == b5 && sicher ==2){

                                dvdErstellen();
                                sicher = 200;
                        }
                        else if(ev.getSource() == b5 && sicher ==3){

                                blurayErstellen();
                                sicher = 300;
                        }
                        else if(ev.getSource() == b5 && sicher ==4){

                                sicher = 400;
                                listeZeigen();
                        }
                        else if(ev.getSource() == b5 && zz == 9999){

                                text.append ("\n\n Zur zeit sind keine Disks\n enthalten");
                                zz=0;
                        }
                } catch (Exception e) {
                        text.append("Fehler im Code!\n" + e);
                }


                try {
                        if (ev.getSource() == b6 && k ==1) {
                                text.append("NEIN \n");
                                System.exit(1);
                        }
                        else if(ev.getSource() == b6 && sicher ==1){

                                hauptMenu();
                                sicher = 100;
                        }
                        else if(ev.getSource() == b6 && sicher ==2){

                                hauptMenu();
                                sicher = 100;
                        }
                        else if(ev.getSource() == b6 && sicher ==3){

                                hauptMenu();
                                sicher = 100;
                        }
                } catch (Exception e) {
                        text.append("Fehler im Code!\n" + e);
                         }


                try{
                        if (ev.getSource() == tf1 ) {
                                test = 1;
                                c = tf1.getText();
                                laden.setValue(25);

                                if (c.equals("Admin")&& m==1) {

                                        text.append("\nGuten Tag Admin, geben Sie Ihr Kennwort ein!\n");
                                        laden.setValue(50);

                                        while(x<2){
                                                cp = JOptionPane.showInputDialog("Bitte Passwort eingeben", "Bitte Passwort eingeben");

                                                if (cp.equals("123")){

                                                        text.append("LogIn ERFOLGREICH!\n");
                                                        laden.setValue(75);
                                                        x = 2;
                                                        z = 888;
                                                        anfangsMenu();
                                                }
                                                else{
                                                        text.append("\nFALSCHES KENNWORT - \nbitte neu eingeben\n");
                                                        x = 1;
                                                }
                                        }
                                }
                                else if(m==1 && c.equals("Gast")|| c.equals("Guest") && m==1 || c.equals("guest") && m==1|| c.equals("gast") && m==1){
                                        text.append("LogIn ERFOLGREICH!\n");
                                        text.append("Für "+c);
                                        z=999;
                                        x = 2;
                                        anfangsMenu();
                                }
                                else if (m==1) {
                                        text.append("\nFALSCHER benutzername - \nbitte neu eingeben\n");
                                }
                                
                        }
                }
                catch (Exception e) {
                        text.append("Fehler im Code!\n" + "\n"+e);
                }


                try {
                        if (ev.getSource() == b7) {
                        text.append("Sie wählten SPEICHERN\n");

                        try{
                                ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("dome.ser"));
                                for(int i=0; i<DB1.disk.size(); i++)
                                {
                                        os.writeObject(Database.disk.get(i));
                                }

                                os.close();
                                System.out.println("\t|| Die Liste wurde im Hauptverzeichniss gespeichert ||");

                        }
                        catch (Exception ex){
                                System.out.println("\n\t\t|| Datei konnte nicht gespeichert werden! ||\n"+ex);
                        }
                        }
                }
                catch (Exception e) {
                        text.append("Fehler im Code!\n" + e);
                }


                try {
                        if (ev.getSource() == b8) {
                        text.append("Sie wählten LADEN\n");

                        try{
                                for(int i=0; i<Database.disk.size(); i++){

                                        Database.disk.remove(i);
                                }

                                ObjectInputStream is = new ObjectInputStream(new FileInputStream("dome.ser"));
                                Database.disk = (ArrayList<Disk>) is.readObject();
                                System.out.println("\t|| Die Liste wurde geladen ||");
                                is.close();
                        }
                        catch(Exception ex){
                                System.out.println("\n\t\t|| Datei konnte nicht geladen werden! ||\n"+ex);
                        }
                        }
                }
                catch (Exception e) {
                        text.append("Fehler im Code!\n" + e);
                }

                try {
                        if (ev.getSource() == b9) {
                                text.append("\nSie haben \"2\" gewählt, sind Sie sicher? \n");
                                arrayLöschung();
                        }
                } catch (Exception e) {
                        text.append("Fehler im Code!\n" + e);
                }


        }
}
```
CD, DVD, Bluray sind alle gleich:


```
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class CD extends Disk implements Serializable{


    String kuenstler;
    int titelanzahl;



    public CD(String einTitel, String derKuenstler, int stuecke, int dieSpielzeit)
    {
        super(einTitel, dieSpielzeit);

        kuenstler = derKuenstler;
        titelanzahl = stuecke;
        habIch = false;
        kommentar = "<kein Kommentar>";
    }

    @Override
    public String toString()
    {
        return "TYP: CD\n\nName = " + this.titel+"\n" + "Künstler = " + this.kuenstler+"\n" + "Titelanzahl = " + this.titelanzahl+"\n" + "Spielzeit = " + this.spielzeit+"\n\n";
    }
    public String getKuenstler(){
            
            return this.kuenstler;
    }


    public String gibKuenstler(){

        return this.kuenstler;

    }

    public int gibTitelanzahl(){

        return this.titelanzahl;

    }



    @Override
    public void ausgeben()
    {
        System.out.print("CD: " + this.titel + " (" + this.spielzeit + " Min)");
        super.ausgeben();
        System.out.println("    " + "Künstler: " + this.kuenstler);
        System.out.println("    Titelanzahl: " + this.titelanzahl);

    }

    @Override
    protected void setzeKommentar(String kommentar)
    {
        this.kommentar=kommentar;
    }

    @Override
    protected void setzeVorhanden(boolean vorhanden)
    {
        habIch = vorhanden;
    }

}
```

Disk:


```
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public abstract class Disk implements Serializable{

    String titel;
    int spielzeit;
    boolean habIch;
    String kommentar;
    String lieferant2;

protected Disk(String einTitel, int dieSpielzeit)
{
    titel = einTitel;
    spielzeit = dieSpielzeit;

}

         public String getTitel()
        {
                return titel;
        }

       

    protected abstract void setzeKommentar(String kommentar);
    /*{
        this.kommentar=kommentar;
    }*/

    protected String gibtKommentar()
    {
        return kommentar;
    }

    protected abstract void setzeVorhanden(boolean vorhanden);
    /*{
        habIch = vorhanden;
    }*/

    protected boolean gibVorhanden()
    {
     return habIch;
    }

    protected void ausgeben(){
    if(habIch) {
            System.out.println("*");
        } else {
            System.out.println();
        }
         System.out.println("    " + kommentar);

    
    }

}
```

Database:

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gui;

 /**
 *
 * @author Ph.Müller
 */
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class Database implements Serializable {

    String lieferant;


    static ArrayList <Disk> disk;
    private int laufende_nr_disk;


    public Database()
    {
        disk = new ArrayList<Disk>();


    }
    


    public void erfasseDisk(Disk dieDisk)
    {

        disk.add(dieDisk);

    }


    public void auflisten()
    {

       // Liste der CDs ausgeben
      for(int i=0; i<disk.size(); i++)
      {

          System.out.println("Arraynummer: "+i+"\n");
          if(disk.get(i) != null)
              
          {
              
              disk.get(i).ausgeben();
              System.out.println();   
          }
          
      }
    }



      public void Eintragloeschen( int nummer ){

      disk.remove( nummer );

}




}
```


habe halt leider nicht die erfahrungen und auch im bereich der GUI bin ich jetzt ca 1 woche(höchstens) dabei.

Wo muss jetzt was hin?
Wie kann ich es einfach und verständlich schreiben?
weiß einfach nicht wie das so eingeben kann, dass die Table sich die Variablen selbst "rausschaut"

hoffe es kann jemand helfen


----------



## Michael... (1. Feb 2010)

Zu dem Code sag ich mal nix ;-)

Hier mal ein Bsp. eines möglichen TableModels:

```
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class DiskTable extends JFrame {

	public DiskTable() {
		List<Disk> list = new ArrayList<Disk>();
		list.add(new CD("TrulaTrula", "????"));
		list.add(new CD("Titel1", "Interpret X"));
		list.add(new CD("Titel2", "Interpret X"));
		list.add(new DVD("Titel4", "Interpret Y"));
		list.add(new CD("Titel5", "Interpret Z"));
		list.add(new DVD("Titel6", "Interpret X"));
		JTable table = new JTable(new DiskModel(list));
		this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
	}

	class DiskModel extends AbstractTableModel {
		private List<Disk> list;

		public DiskModel(List<Disk> list) {
			this.list = list;
		}

		public String getColumnName(int column) {
			switch (column) {
			case 0:
				return "Titel";
			case 1:
				return "Interpret";
			case 2:
				return "Typ";
			}
			return "";
		}

		public Object getValueAt(int row, int column) {
			Disk disk = list.get(row);
			switch (column) {
			case 0:
				return disk.getTitle();
			case 1:
				return disk.getInterpret();
			case 2:
				return disk.getType();
			}
			return null;
		}

		public int getColumnCount() {
			return 3;
		}

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

	class CD extends Disk {
		public CD(String title, String interpret) {
			super(title, interpret);
		}
	}

	class DVD extends Disk {
		public DVD(String title, String interpret) {
			super(title, interpret);
		}
	}

	abstract class Disk {
		private String title, interpret;

		public Disk(String title, String interpret) {
			this.title = title;
			this.interpret = interpret;
		}

		public String getTitle() {
			return title;
		}

		public String getInterpret() {
			return interpret;
		}

		public String getType() {
			return this.getClass().getSimpleName();
		}
	}

	public static void main(String[] args) {
		JFrame frame = new DiskTable();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
```


----------

