# Select in JTable



## Stephan2009 (28. Sep 2011)

Hallo zusammen, ich würde gern wissen wie ich es am besten anstelle das wenn ich eine Zeile im JTable markiere ein bestimmter Inhalt darin gespeichert wird.Das heißt 1) ich markiere die Zeile im JTabel, 2) öffne ein GuiFenster gebe Daten ein und speicher diese in einer Datei. (klappt) nun soll genau an dieser Stelle im Table die Daten angezeigt werden. Wie mach ich das am besten?

Hier mal der Code der JTable 

```
String[] columnNames = {"Nr.", "Kategorie Fotos" ,"Titel","Autor","Bewertungen" };
            
       	    
	        Object[][] data = {
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""}, 
	        };
	        // fehlt ein ActionListener zum Sortieren der Table
	        
	        
	        final JTable table = new JTable(data, columnNames);
```

Hier der Code um die Table zu markieren :


```
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	        if (ALLOW_ROW_SELECTION) { 
	            ListSelectionModel selectmodel = table.getSelectionModel();
	            selectmodel.addListSelectionListener(new ListSelectionListener() {
	                public void valueChanged(ListSelectionEvent e) {
	                    
	                    if (e.getValueIsAdjusting()) return;

	                    ListSelectionModel listenmodel = (ListSelectionModel)e.getSource();
	                    if (listenmodel.isSelectionEmpty()) {
	                        System.out.println("No rows are selected.");
	                    } else {
	                    	// hier muss meine Ladefunktion hin
	                        int selectedRow = listenmodel.getMinSelectionIndex();
	                        System.out.println("Row " + selectedRow
	                                           + " is now selected.");
	                    }
	                }
	            });
	        } else {
	            table.setRowSelectionAllowed(false);
	        }
```


----------



## Jigga (28. Sep 2011)

meinst du genau an der markierten stelle angezeigt werden,sprich in der Zeile?
du verwendest ja bestimmt ein TableModel. nach dem speichern der Daten fügst du deinem TableModel einfach einen Eintrag an der gewünschten Stelle hinzug.


----------



## Stephan2009 (28. Sep 2011)

ja so mein ich das, benutze aber noch kein Tablemodel


----------



## Michael... (28. Sep 2011)

Stephan2009 hat gesagt.:


> ja so mein ich das, benutze aber noch kein Tablemodel


Doch - zumindest indirekt ;-) Denn eine JTable ohne TableModel gibt's nicht.
Ansonsten bietet JTable die Methode setValueAt(...) an, um Werte ins Model zu übertragen.


----------



## Stephan2009 (28. Sep 2011)

hmm ok ich habe es jetzt so gemacht 

```
DefaultTableModel model = new DefaultTableModel(data, columnNames);
final JTable table = new JTable(model);

// Methode für TableModel
		public Object GetData(JTable table, int row_index, int col_index){
        	  return table.getModel().setValueAt(aValue, row_index, col_index);
        	  }
```

Was übergebe ich denn jetzt für aValue ?


----------



## Wladimir (28. Sep 2011)

Der Wert von aValue ersetzt den Wert aus deinem data Array an der entsprechenden Stelle. In deinem Fall wahrscheinlich ein String.
Noch paar nützliche Tipps:

```
table.getColumnModel().getSelectionModel().addListSelectionListener(...);
```
 um auch auf Spaltenselektion zu horchen.

```
table.getSelectedRow() und table.getSelectedColumn()
```
 liefern die jeweilige selektierte Zeile oder Spalte


----------



## Jigga (28. Sep 2011)

ich glaube du musst dir mal etwas genauer das Prinzip des TableModel Prinzips anschauen. Das TableModel ist sozusagen dein "TabellenDatenVerwalter". Immer wenn du etwas an den Daten deiner Daten änderst,geht dies über das TableModel. Die JTable bezieht sich nur auf das TableModel um die Daten darzustellen,mehr nicht.
Ich hab mal mein TableModel etwas abgespeckt hier reingestellt damit dir das ganze etwas klarer wird.

```
import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;



public class HistoryTableModel implements TableModel {


	public void addHistoryEntry(HistoryEntry historyEntry) {
		//Einen Eintrag zur ArrayList/Datenbank hinzufügen und anzeigen lassen

		//listener bescheid sagen,dass sich etwas getan hat
		TableModelEvent e = new TableModelEvent(this, index, index,
				TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
		for (int i = 0, n = listeners.size(); i < n; i++) {
			((TableModelListener) listeners.get(i)).tableChanged(e);
		}
		}
	}

	
	public void updateHistory(HistoryEntry entry, String banDuration) {
		//hier werden einträge abgeändert und angezeigt
		TableModelEvent e = new TableModelEvent(this,
				TableModelEvent.UPDATE, TableModelEvent.UPDATE);
		for (int i = 0, n = listeners.size(); i < n; i++) {
			((TableModelListener) listeners.get(i)).tableChanged(e);
		}

	}




	public void deleteExpired() {
		//Einträge werden aus ArrayList/Datenbak gelöscht und dem JTable bescheid gesagt
			TableModelEvent e = new TableModelEvent(this,
					TableModelEvent.DELETE, TableModelEvent.DELETE);
			for (int i = 0, n = listeners.size(); i < n; i++) {
				((TableModelListener) listeners.get(i)).tableChanged(e);
			}
		} catch (ParseException e1) {
			e1.printStackTrace();
		}
	}


	// Die Anzahl Columns
	public int getColumnCount() {
		return 6;
	}

	// Die Anzahl Vehikel
	public int getRowCount() {
		return historyList.size();
	}

	// Die Titel der einzelnen Columns
	public String getColumnName(int column) {
		switch (column) {
		case 0:
			return "Player Name";
		case 1:
			return "Forum Section";
		.
		.
		.
		case 5:
			return "Forum Link";
		default:
			return null;
		}
	}

	// Der Wert der Zelle (rowIndex, columnIndex)
	public Object getValueAt(int rowIndex, int columnIndex) {
		HistoryEntry entry = (HistoryEntry) historyList.get(rowIndex);
		switch (columnIndex) {
		case 0:
			return entry.getPlayerName();
		.
		.
		.
		.
		case 5:
			return entry.getForumLink();
		default:
			return null;
		}
	}

	// Eine Angabe, welchen Typ von Objekten in den Columns angezeigt werden
	// soll
	public Class<?> getColumnClass(int columnIndex) {
		return String.class;
	}

	public void addTableModelListener(TableModelListener l) {
		listeners.add(l);
	}

	public void removeTableModelListener(TableModelListener l) {
		listeners.remove(l);
	}

	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return false;
	}

	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		// hier wäre dann das einfügen deiner Daten
	}


}
```


----------



## Stephan2009 (29. Sep 2011)

Danke für die guten Tipps werde es mal ausprobieren, aber im moment hab ich schwierigkeiten mit dem SelectionListener es ist so das ich hier einen Button habe 


```
button2.addActionListener(new ActionListener(){
		    	public void actionPerformed(ActionEvent e) {
		    	Neue_Bewertung bewertung=new Neue_Bewertung();	
		        bewertung.setVisible(true);
		        bewertung.pack();}
```

Wenn dieser gedrückt wird öffnet sich eine neues Fenster. Nun will ich es so haben das das Fenster sich nur öffnen soll wenn eine Zeile im JTable markiert ist. Dazu hab ich mir eine neue Klasse für den Listener gemacht und zwar


```
// Klasse SelectionListener
	    public class SelectionListener implements ListSelectionListener {
           JTable table;
         
	     SelectionListener(JTable table) {
            this.table = table;
		}
		
		public void valueChanged(ListSelectionEvent e) {
           
            if (e.getSource() == table.getSelectionModel()
                  && table.getRowSelectionAllowed()) {
            	ListSelectionModel listenmodel = (ListSelectionModel)e.getSource();
                if (listenmodel.isSelectionEmpty()) {
                	System.out.println("Bitte Zeile auswählen");
                }
            }}                   	    
	    }
```

In der Klasse wo der Button ist also oben habe ich dann den Zugriff auf den Listener so gestaltet:


```
SelectionListener listener = new SelectionListener(table);
	        table.getSelectionModel().addListSelectionListener(listener);
	        table.getColumnModel().getSelectionModel()
	            .addListSelectionListener(listener);
```

Finde den Fehler nicht im Listener.


----------



## Michael... (29. Sep 2011)

Stephan2009 hat gesagt.:


> Wenn dieser gedrückt wird öffnet sich eine neues Fenster. Nun will ich es so haben das das Fenster sich nur öffnen soll wenn eine Zeile im JTable markiert ist. Dazu hab ich mir eine neue Klasse für den Listener gemacht und zwar.


Ich vermute Du unterliegst hier einem Denkfehler. Der SelectionListener informiert alle registrierten Interessenten darüber, dass dich gerade die Selektion geändert hat.
Du willt aber einfach nur überprüfen ob aktuell eine Selektion in der JTable vorliegt. Dazu braucht man keinen SelectionListener. Herfür liefert JTable selbst bereits weiter oben genannte Methoden.


----------



## Stephan2009 (29. Sep 2011)

alles klar funktioniert hast Recht


----------



## Stephan2009 (29. Sep 2011)

Ein anderes Problem womit ich gerade kämpfe ist das wenn die eine Zeile Selektiert ist eine Fallunterscheidung getroffen werden soll nachdem ein neues Fenster geöffnet worden das heißt das Fenster öffnet sich und dann muss eine bestimmte Datei geöffnet werden ( Datei 1, Datei 2 ...) Der Table übergebe ich 


```
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	        table.setRowSelectionAllowed(true);
```

damit eine gesamte Zeile markiert wird. In der Klasse wo sich das Fenster erzeugt wird habe ich eine Referenz auf meine Table udn übergebe


```
int wert=bewertungen.table.getSelectedRow();
    if(wert==1){
    
    area.read(new FileReader(file), null);
    area1.setToolTipText("Hier werden abgegebene Bewertungen angezeigt");
    area1.read(new FileReader(file1), null);
    area1.setBorder(BorderFactory.createLineBorder(Color.black, 1));
    area.setToolTipText("Hier werden abgegebene Feedbacks angezeigt");
    }
```

ich gehe davon aus das wenn eine komplette Zeilte markiert ist ich nur getSelectedRow abfragen muss. Es tut sich aber nix was mache ich falsch?


----------



## Jigga (29. Sep 2011)

wert repräsentiert den zeilenindex in deinem fall. sprich wenn zeile nummer 2 markiert ist,dann geht er in die if anweisung rein,sonst nicht.


----------



## Stephan2009 (29. Sep 2011)

Die Daten soll der Table auch noch nicht übergeben werden, es geht nur darum das wenn die gesamte Zeile 1 markiert ist die Datei 1 in meinem öffnenden Fenster geladen wird , wenn die gesamte Zeile 2 markiert ist in meinem Fenster die Datei 2 aufgerufen wird...

Genau du sagst es


----------



## Stephan2009 (29. Sep 2011)

```
// Fallunterscheidung welche Liste geöffnet wird
    
    int wert=bewertungen.table.getSelectedRowCount();
    if(wert==1){
    
    area.read(new FileReader(file),null);
    area1.setToolTipText("Hier werden abgegebene Bewertungen angezeigt");
    area1.read(new FileReader(file1), null);
    area1.setBorder(BorderFactory.createLineBorder(Color.black, 1));
    area.setToolTipText("Hier werden abgegebene Feedbacks angezeigt");
    }
    
    if(wert==2){
    	area.read(new FileReader(file2), null);
        area1.setToolTipText("Hier werden abgegebene Bewertungen angezeigt");
        area1.read(new FileReader(file3), null);
        area1.setBorder(BorderFactory.createLineBorder(Color.black, 1));
        area.setToolTipText("Hier werden abgegebene Feedbacks angezeigt");	
    }
    
    if(wert==3){
    	area.read(new FileReader(file4), null);
        area1.setToolTipText("Hier werden abgegebene Bewertungen angezeigt");
        area1.read(new FileReader(file5), null);
        area1.setBorder(BorderFactory.createLineBorder(Color.black, 1));
        area.setToolTipText("Hier werden abgegebene Feedbacks angezeigt");	
    }
```


----------



## Jigga (29. Sep 2011)

```
int wert=bewertungen.table.getSelectedRow();
switch (wert) {
case 0:
//lade datei 1
break;
case 1:
//lade datei 2
break;
default:
}
```


----------



## Michael... (29. Sep 2011)

Nur so nebenbei: Das sieht jetzt nicht nach OOP aus.


Stephan2009 hat gesagt.:


> ```
> int wert=bewertungen.table.getSelectedRowCount();
> ```



Reicht es nicht einfach aus den Index der selektierten Zeile zu übergeben? Muss der Dialog die JTable kennen?
Schon man mit Arrays oder Listen gearbeitet? Dann könnte man sich eventuell die Fallunterscheidung sparen.


----------



## Jigga (29. Sep 2011)

mir fällt gerade auf: gibt 
	
	
	
	





```
bewertungen.table.getSelectedRowCount();
```
 nicht die Anzahl der selektierten Zeilen wieder?demnach müsste das doch immer 1 sein,da du ja zuvor singleselection gesetzt hast?bin jetzt davon ausgegangen,dass du von einer bestimmten zeile sprichst,also 
	
	
	
	





```
getSelectedRow()
```


----------



## Stephan2009 (29. Sep 2011)

ja da hab ich mich vertippt ,

@michael wie meinst du das genau?


----------



## Stephan2009 (29. Sep 2011)

mit dem switch scheint es aber auch nicht so zu gehen


----------



## Jigga (29. Sep 2011)

er meinte,dass das ganze nicht sehr elegant ist und nicht wirklich objektorientiert...
gib dir probehalber den "wert" davor aus?


----------



## Stephan2009 (29. Sep 2011)

Zum Verständis ist es so das ich ein Fenster Bewertungen habe in dem Bilder bewertet werden sollen. Dabei gibt es zwei Buttons einer davon ist der Button "Details" anzeigen. Die vorgehensweise die ich mir dachte ist, markiere die erste Zeile , drücke den Knopf Details , dieser zeigt mir dann die entsprechende Liste aller abgegebenen Bewertungen auf zu der selektierten Zeile im JTable. Da die vorher abgegebenen Bewertungen in einer TXT gespeichert werden soll eine Fallunterscheidung getroffen werden welche Liste mir angezeigt wird nachdem ich den Knopf Details gedrückt habe. Puh


----------



## Jigga (29. Sep 2011)

ok moment mal.sehe ich das richtig,dass du dann vorhast (mal angenommen du hast 20 bilder,also auch 20 dateien mit bewertungen) 20 fallunterscheidung zu schreiben?!
mal ein vorschlag:
konstruktor für deine "Bilder" mit entsprechenden Details wie: name, anzahl bewertungen, bilderPfad, etc..
In deiner JTable zeigst du nur die Infos an,die gesehen werden sollen.
bildername ist hier zB wichtig,wenn jetzt ein datensatz selektiert ist, holst du dir den bildernamen raus mit getValueAt() und rufst die entsprechende Datei auf.


```
String bilderName = table.getValueAt(selektiertzeile, spalteDesBildNames);
//txt.datei laden mit dem namen des Bildes
```
natürlich sollten dann die textdateien genau so heißen,wie die bilder...

Aber auch dies ist imho nicht wirklich elegant.Besser wäre es beispielsweise die Bewertungen in einer Datei zu haben "bewertungen.txt", die dann beispielsweise so aufgebaut ist:
bildername;bewertetVon;note;datum;bewertetVon2;note2;datum2;....
bildername2;bewertetVon.....
bildername3....

Jede Zeile der Textdatei würde einen String repräsentieren mit allen infos des jeweiligen Bildes.
Beim Programmstart liest du die Datei einfach aus,erstellt dir objekte und speicherst diese in einer ArrayList. Bei klicken auf details kannst du dann direkt die Infos holen ohne irgendwelche Dateien zu laden...
Ansonstne: evtl mal an mini datenbank gedacht?kannst dir eine Datei erstellen,die eine einfach DB repräsentiert (SQLite beispielsweise),das wäre dann sogar um einiges einfacher/sichere, als mit einer textdatei...


----------



## Michael... (29. Sep 2011)

Stephan2009 hat gesagt.:


> Da die vorher abgegebenen Bewertungen in einer TXT gespeichert werden soll eine Fallunterscheidung getroffen werden welche Liste mir angezeigt wird nachdem ich den Knopf Details gedrückt habe. Puh


Heißt in Abhängigkeit des in der Tabelle selektierten Eintrages soll die passende Liste angezeigt werden?
Die Notwendigkeit einer Fallunterscheidung sehe ich hier nicht. Wenn die Berwertungslisten in einer List/Array mit der gleichen Reihenfolge wie die "Bilder" in der Tabelle verwaltest, benötigst Du ja nur den Row Index aus der JTable und kannst damit direkt auf die passende Bewertungsliste in der List/Array zugreifen.

Mit einem geeigneten Daten/TableModel wäre das vermutlich noch komfortabler, könnte aber zu komplex für Dich werden.


----------



## Stephan2009 (29. Sep 2011)

danke werd ich mir Gedanken drüber machen allerdings ist es so das die Bilder auch nicht auf der Festplatte zur Verfügung stehen sondern als REST Aufruf aus dem Netz geladen werden


----------



## Jigga (29. Sep 2011)

Stephan2009 hat gesagt.:


> danke werd ich mir Gedanken drüber machen allerdings ist es so das die Bilder auch nicht auf der Festplatte zur Verfügung stehen sondern als REST Aufruf aus dem Netz geladen werden



könntest du mir evtl per mail schreiben, wie genau du diese REST geschichte realisiert hast?muss mich da gerade etwas mit rumschlagen...

@topic: wie und wann erstellst du dir deine Tabellen-Einträge?


----------



## Stephan2009 (29. Sep 2011)

Das mit dem Rest aufruf ist eigentlich schnell gesagt : ich baue mir eine URL Verbindung auf schreibe mir die XML Dateien in eine Datei, durchlaufe die XML Datei, baue mir die Strings zusammen von Beispielsweise 20 Fotos und speicher mir dies in einer ArrayList und diese sollen eben in der JTable angezeigt werden und im nachhinein bewertet


----------



## Michael... (29. Sep 2011)

Man könnte ja eigene Objekte definieren die neben dem Bild auch dessen Bewertung enthalten und diese in die ArrayList und ins TableModel...


----------



## Stephan2009 (29. Sep 2011)

....


----------



## Jigga (30. Sep 2011)

weißt du wie es da von der server-seite her ausschaut?wenn es sich um PHP handelt würde ich gerne mal in die entsprechende klasse schauen.

@ topic: in dem kontext, wo du dir die strings usw. der fotos ausliest,kannst du dir davon ja objekte erstellen.würde das ganze sehr vereinfachen denke ich.


----------



## Stephan2009 (4. Okt 2011)

Hallo zusammen ich habe es fast soweit, ich mache es jetzt so das ich nach dem ActionListener die Felder einlese und mir daraus ein Objekt erzeuge, mein einziges Umsetzungsproblem ist es nur noch wie erzeug ich mein Objekt mit dem Bild? Hier mal mein Code


```
button.addActionListener(new ActionListener(){
	    	public void actionPerformed(ActionEvent e) {
	    		
	    		if(area.getText().equals("")){
                	area.setForeground(Color.red);
                	area.setText("Bitte Feedback eingeben!!");
        }
                if(field1.getText().equals("")){
                	field1.setForeground(Color.red);
                	field1.setText("Bitte Titel eingeben!!");
                }
                if(field.getText().equals("")){
                	field.setForeground(Color.red);
                	field.setText("Bitte Metainformationen eingeben!!");
                }
                if(field3.getText().equals("")){
                	field3.setForeground(Color.red);
                	field3.setText("Bitte Autor eingeben!!");
                }
                if(bewertungsfeld.getText().equals("")){
                	bewertungsfeld.setForeground(Color.red);
                	bewertungsfeld.setText("Bitte Bewertung abgeben!");
                }
                else{
                	
	    			String Titel=field.getText();
	    			String Meta=field1.getText();
	    			String Kategorie=field2.getText();
	    			String Autor=field3.getText();
	    			String Bewertung=bewertungsfeld.getText();
	    			String Text=area.getText();
	    			
	    			List<URL> liste=photos.getListe();
	    			
	    			for(int i=0;i<liste.size();i++){
	    			String fotoliste=liste.get(i).toString(); // URL als String
	    			}
	    			
	    			Photo foto=new Photo();
	    			
	    			foto.setFotoURL(fotoliste);
	    			foto.setTitel(Titel);
	    			foto.setMeta(Meta);
	    			foto.setKategorie(Kategorie);
	    			foto.setAutor(Autor);
	    			foto.setBewertung(Bewertung);
	    			foto.setText(Text);
	    			
	    			photoobjekte.add(foto);
	    		}}}
	    	);
```
Die Fotos liegen in der "liste" mit toString kann ich daraus ja Strings erzeugen aber das Problemist noch wie mache ich es am besten das ich genau das Foto mit dem Objekt zusammenpacke ich muss ja irgendwie sagen das ich Zeile 1 Bild 1 ist . Ich packe die Bilder mit dem CellRenderer per Label auf die JTable, habe jetzt aber zusätzlich den ImageIcons eine Description vergeben.

Als weiteren Versuch wollte ich so vorgehen weiß aber nicht ob es so geht 


```
List<URL> liste=photos.getListe();
	    			//int wert=bewertungen.table.getRowCount();
	    			//String fotoliste=liste.get(i).toString(); // URL als String
	    			for(int wert1=bewertungen.table.getRowCount();wert1<=0;wert1--){
	    			Object obj = bewertungen.table.getValueAt(wert1, 1);
	    			String zelle=obj.toString();
	    			if(zelle.equals("Bild1")){	    			
	    					
	    			Photo foto=new Photo();
	    			foto.setFotoURL((String) obj);
	    			foto.setTitel(Titel);
	    			foto.setMeta(Meta);
	    			foto.setKategorie(Kategorie);
	    			foto.setAutor(Autor);
	    			foto.setBewertung(Bewertung);
	    			foto.setText(Text);
	    			
	    			ArrayList array=foto.getArray();
	    			array.add(foto);
	    			}
	    		}
```


----------



## Stephan2009 (5. Okt 2011)

jemand eine Idee für mich?


----------



## Michael... (5. Okt 2011)

Stephan2009 hat gesagt.:


> [JAVA=35]	    			for(int i=0;i<liste.size();i++){
> String fotoliste=liste.get(i).toString(); // URL als String
> }
> 
> ...


Warum hier die Schleife?
Dir ist bewusst, dass die String-Variable fotoliste in Zeile 36 nur in der Schleife/Zeile gültig ist und nichts mit der Variable fotoliste in Zeile 41 zu tun hat - falls diese überhaupt exisitiert.
Ist jetzt nicht böse gemeint: Dem Code nach zu urteilen hast Du kaum Erfahrung in der (Java)Programmierung. Eventuell solltest Du Dich noch mal mit den Grundlagen auseinandersetzen.


Stephan2009 hat gesagt.:


> jemand eine Idee für mich?


Bei welchem Problem?


----------



## Stephan2009 (5. Okt 2011)

Ja das ist mich schon bewusst , der Code mit der Schleife war nicht mehr gültig hab ich vergessen auszukommentieren. Es ist ja so das ich die Felder alle auslesen und ein Objekt erzeugen möchte das ist ja nicht schwer. Nun ist aber mein Problem wie ich es am besten mache das ich dem Objekt meine Foto mit übergeben kann, weil ich ja in der JTable immer eine Zeile Selektiere.

Es ist ja so das meine Bilder über den CellRenderer in meine JTable erzeugt werden. (ImageIcon ans Label)


----------



## Jigga (5. Okt 2011)

warum erstellst du nicht davor objekte?sprich bevor du sie in die jtable lädst?wäre doch viel leichter (und sinnvoller)?
ansonsten: dein Bild wird ja als Pfad in einem String repräsentiert:
	
	
	
	





```
String bildPfad = "pfad an dieser stelle holen/laden/wie auch immer du das mit dem REST machst"
```


----------



## Stephan2009 (5. Okt 2011)

Ja es ist so das meine Bilder ein String URL Repräsentation haben die bei mir in einer ArrayListe gespeichert werden. Danach werden diese aus der Liste herausgeholt , ein ImageIcon erzeugt, diese auf ein Label gesetzt und danach in die JTable gesetzt.

Ich möchte es ja gerne so haben das wenn ich eine neue Bewertung abgebe alle Felder aus der Gui auslese und dann mit diesen und dem Foto ein Objekt bilden kann. Problem : kann ich mir mit getValueat den Wert auslesen aus der JTable um jeder Bewertung das Foto zuordnen zu können,


----------



## Michael... (5. Okt 2011)

Wenn ich mich recht erinnere bekommst Du die URLs aus einem XML.
Beim Auslwerten dieses XML erzeugst Du für jede URL ein "Photo" Objekt, das neben div. anderen Attributen auch eine Referenz auf das mittels URL erzeugte ImageIcon hält. Diese "Photo" Objekt packst Du in eine Liste, die an Dein TableModel übergeben wird. Das TableModel noch ein bisschen anpassen und fertig ist das ganze...


----------



## Jigga (5. Okt 2011)

ich sehe da irgendwie dein problem nicht.

wie mein vorrädner bereits gesagt hat,sobald du die bilder lädst erstellst du dir objekte:

```
Foto bild = new Foto("fotoLink oder Pfad", "fotoName", "und was du sonst noch brauchst");
```
Diese Objekte übergibst du deinem TableModel,welches sie in einer ArrayList speichert. Bei einem Klick auf den Button,oder wo auch immer, kannst du einfach das Objekt aus der Tabelle hole mit dem TableModel und mit diesem dann arbeiten.


```
fotoObjekt.getDeinGewünschstesAttribut();
```

EDIT: ich glaube du versuchst hier gerade deinen Objekten die BildDatei ansich zu übergeben.warum?
das tust du ja auch sonst nicht,warum willst du dies dann hier tun?ein verweis auf die bilddatei ist doch genug?


----------



## Stephan2009 (5. Okt 2011)

danke euch beiden dei sache ist mir jetzt klarer


----------

