# JTable - Boolean-Wert aus Zelle auslesen.



## Rydl (22. Jul 2004)

ich möchte grade die werte aus meiner tabelle abspeichern.
dazu dachte ich mir, les ich alle einzeln aus und speicher sie in ein objekt.
bei den boolean werten gibt es allerdings ein problem:


```
String s = String.valueOf(model.getValueAt(i, 5)); // diese zeile verursacht ne NumberFormatException. 
     boolean v = Boolean.getBoolean(s); // die nich..
```

Aber warum?


----------



## Beni (22. Jul 2004)

Poste doch mal den Fehler.

Wie hast du die booleans gespeichert? Vielleicht benötigst du ja nur einen Cast?

```
Boolean b = (Boolean)model.getValueAt(i, 5);
```

Und sonst: da dem String ein Object übergeben wird, passiert der Fehler eher innerhalb der "toString"-Methode des Objects. Probier doch mal aus, was passiert, wenn du

```
String s = model.getValueAt(i, 5).toString();
```
einsetzt.


----------



## Rydl (22. Jul 2004)

java.lang.NumberFormatException: For input string: "true"

	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48 )
	at java.lang.Integer.parseInt(Integer.java:468)
... usw ...

an dem true in der fehlermeldung ist schonmal zu erkennen, dass der wert irgendwie richtig ausgelesen wird(der war wirklich true).

die toString methode funktioniert leider genausowenig...
das casten geht seltsamerweise auch nicht.

is echt blöde, dass nur ein (allgemeines) objekt mit model.getValueAt() übergeben wird.
Strings und Integer konnte ich ohne Probleme umwandeln mit der Methode Objekt zu String (und ggf. zu int)


----------



## Beni (22. Jul 2004)

Jop, wäre interessant zu wissen, was für ein Objekt das ist...

Was gibt denn das hier aus?

```
System.out.println( model.getValueAt( i, 5 ).getClass().getName() );
```


----------



## Rydl (22. Jul 2004)

java.lang.Boolean

...aber einfach 
	
	
	
	





```
boolean v = model.getValueAt(i,5);
```
 geht auch nicht,
da verlangt er wieder java.lang.Object...

was machen wir nun?


----------



## Guest (22. Jul 2004)

boolean v = (model.getValueAt(i,5) == Boolean.TRUE);

oder

Boolean v = (Boolean)model.getValueAt(i,5);


----------



## Rydl (23. Jul 2004)

prima, die erste möglichkeit hat geklappt!
die logischen lösungen sind doch immer die besten


----------



## Beni (23. Jul 2004)

... und die unsicherste, muss ich noch hinzufügen.

Wenn du nämlich irgendwann mal ein "new Boolean( true )" speicherst, kommt dort oben trotzdem false raus...
Ich würde Dir die zweite empfehlen, ist aber deine Sache  :wink:


----------



## Rydl (23. Jul 2004)

also an der stelle im programm kann da garkein fehler auftreten.
wenn vom model true zurückgegeben wird, ist die aussage wahr, 
wenn nicht, dann nicht.


> Wenn du nämlich irgendwann mal ein "new Boolean( true )" speicherst, kommt dort oben trotzdem false raus...


und in welchem fall würde das denn passieren?


----------



## Guest (23. Jul 2004)

Was Beni meint ist 

```
System.out.println(new Boolean(true) == Boolean.TRUE);
```
liefert *false*, da der Vergleich über Referenzen geht.

Wenn Du irgendwo beim Setzen der Daten in TableModel
sowas wie new Boolean(...) machst, dann wird's nicht 
funktionieren, da die Referenz von Boolean.TRUE eine andere
ist als die von einem erzeugten new Boolean(...) - Objekt. 

Gruß,
Michael (semi)


----------

