# Variable in Frame anzeigen



## Mister Fabulous (16. Jan 2009)

Ihr werdet mich auslachen, aber ich stehe vor einem grundlegenden Problem, dass bisher anscheinend nirgends im Internet behandelt worden ist.

Und zwar geht es um die Darstellungsweise mit Swing in einem Frame. Ich möchte ganz simpel ein Feld haben, dass den Wert einer Variable anzeigt (und zwar nicht in String!).


```
int zahl
```

Ich will bloß, dass diese Variable im Frame angezeigt wird.

Wie geht das?

MfG Mister Fabulous


----------



## 0x7F800000 (16. Jan 2009)

Mister Fabulous hat gesagt.:
			
		

> Ihr werdet mich auslachen, aber ich stehe vor einem grundlegenden Problem, dass bisher anscheinend nirgends im Internet behandelt worden ist.


Nein, das werden wir nicht, das gibt's hier nicht. Allerhöchstens gibts hier manchmal was zum heulen  (nicht dieser Thread jetzt, aber ein paar andere^^)



> Und zwar geht es um die Darstellungsweise mit Swing in einem Frame. Ich möchte ganz simpel ein Feld haben, dass den Wert einer Variable anzeigt


Normalerweise würde man wohl einfach einen JLabel irgendwo in die GUI einfügen, und den Wert der Variablen da reinschreiben. Zum bau von GUI's gibts tonnenweise tutorials bei sun und openbooks.



> und zwar nicht in String!


Nun ja, da kann man es sich beliebig kompliziert machen. Kommt natürlich sehr auf die Gestalt der variablen an. Je nach Situation kann die Variable ja eine Funktion oder irgendein Histogramm oder 3D-Modell oder Musikstück oder irgendein Bild oder überhaupt alles mögliche sein, dann kann man das auch jeweils irgendwie angemessen presentieren. Dazu müsstest du aber genauer spezifizieren, was du willst.



> ```
> int zahl
> ```
> Ich will bloß, dass diese Variable im Frame angezeigt wird.


Dafür wären raygetrace'te 3D-Modelle wohl nicht ganz angebracht, im falle einer int-variable müsste ein JLabel absolut ausreichen.


----------



## Templon (16. Jan 2009)

Mister Fabulous hat gesagt.:
			
		

> ... ,dass bisher anscheinend nirgends im Internet behandelt worden ist.


Glaube nicht, dass es das gibt =)



			
				Mister Fabulous hat gesagt.:
			
		

> und zwar nicht in String!


Wie dann?

Wie wärs mit einem einfachen JLabel, welches deine Zahl anzeigt? =)


```
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestFrame extends JFrame{
	
	private int zahl = 42;
	
	public TestFrame() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		add(new JLabel(zahl + ""));
		pack();
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new TestFrame();
	}
}
```


----------



## Mister Fabulous (16. Jan 2009)

Das mit dem Auslachen war jetzt nicht wörtlich gemeint, sondern Ausdruck meiner Verzweiflung 

Jedenfalls habe ich beim JLabel das Problem, dass es ja nur Text (also String) enthalten und anzeigen kann.

Bei nur wenigen Ausdrücken, die dargestellt werden können in diesem JLabel, ließe sich das ja mit einer oder mehreren if-Methoden umgehen, dass ich dann setText() benutze. Aber wenn ich eine Zahl habe, die durchaus in den Tausenderbereich gehen kann, kann ich ja wohl schlecht ne Switch mit 1000 verschiedenen Fällen erstellen. Das wäre irgendwie nicht zweckmäßig.

Noch ein Code, um zu zeigen, was anscheinend nicht geht:


```
private int zahl;
private JLabel text = new JLabel(zahl);
```


----------



## Templon (16. Jan 2009)

Versuchs mal so:


```
private int zahl; 
private JLabel text = new JLabel(zahl + "");
```

=)


----------



## Wildcard (16. Jan 2009)

```
String s = Integer.toString(1230);
```


----------



## Mister Fabulous (16. Jan 2009)

```
[b]add(new JLabel(zahl + ""));[/b]
```

Nein. Nicht wirklich, oder? MIT DIESEN SIMPLEN + "" KANN MAN DAS UMGEHEN????

Ich fass es ja nicht.

Naja, danke, hätte nicht gedacht, dass man das so einfach austricksen kann.


MfG Mister Fabulous[/b]


----------



## 0x7F800000 (16. Jan 2009)

@OT: wie kann man denn glauben, dass java mit einer halben million klassen in der API nicht mal in der lage ist, eine Zahl in einem String darzustellen, ne jetzt mal ehrlich? 

@Templon:
pfui. Dieses "+" das wird doch irgendwie intern durch StringBuilder geregelt die da erstellt werden und irgendwelchen kram zusammenbasteln und ausgeben und dann wieder von GC aufgeräumt werden müssen usw^^ nee, das mit leeren Strings sollte man nicht machen, mit der methode sieht's doch auch viel schöner aus:

```
String.valueOf(int x)
```
oder meinst du nicht?  

edit: oder so wie Wildcard das vorgeschlagen hat (zu spät bin ich^^)


----------



## Mister Fabulous (16. Jan 2009)

Noch eine Zusatzfrage:

Warum hat Java.swing nicht einfach ein Element (bspw. JVariable, jetzt nur mal als Beispiel, ich weiß, dass das ein blöder Name ist^^) das ALLE Datentypen bedingungslos darstellt. Warum gibt es nur ein Element, das auf String vorprogrammiert ist?


----------



## Wildcard (16. Jan 2009)

Mister Fabulous hat gesagt.:
			
		

> Nein. Nicht wirklich, oder? MIT DIESEN SIMPLEN + "" KANN MAN DAS UMGEHEN????
> 
> Ich fass es ja nicht.
> 
> Naja, danke, hätte nicht gedacht, dass man das so einfach austricksen kann.


Es geht hier nicht um austricksen.
Labels können deshalb nur Strings darstellen, weil man so ziemlich alles in irgendeiner  Form als String darstellen kann.
Macht doch keinen Sinn 20 Methoden für setInt, setDouble, set... zu haben wenn es eine einzige auch tut.


----------



## Wildcard (16. Jan 2009)

Mister Fabulous hat gesagt.:
			
		

> Warum hat Java.swing nicht einfach ein Element (bspw. JVariable, jetzt nur mal als Beispiel, ich weiß, dass das ein blöder Name ist^^) das ALLE Datentypen bedingungslos darstellt. Warum gibt es nur ein Element, das auf String vorprogrammiert ist?


Im Prinzip ist das so. Viele GUI Elemente (Tabellen, Listen, Bäume,..) verwenden Renderer um einzelne Objekten grafisch abzubilden. Sollte es sich bei den Objekten nicht um Strings handeln, und ist kein spezieller Renderer gesetzt worden, dann wird auf dem Objekt einfach die toString Methode aufgerufen (die hat jedes Objekt) und das Ergebnis dargestellt.


----------



## Templon (16. Jan 2009)

Andrey hat gesagt.:
			
		

> @Templon:
> pfui. Dieses "+" das wird doch irgendwie intern durch StringBuilder geregelt die da erstellt werden und irgendwelchen kram zusammenbasteln und ausgeben und dann wieder von GC aufgeräumt werden müssen usw^^ nee, das mit leeren Strings sollte man nicht machen, mit der methode sieht's doch auch viel schöner aus:
> 
> ```
> ...



Doch doch, da bin ich ganz deiner Meinung


----------

