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!).
Code:
int zahl
Ich will bloß, dass diese Variable im Frame angezeigt wird.
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.
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.
Code:
int zahl
Ich will bloß, dass diese Variable im Frame angezeigt wird.
Wie wärs mit einem einfachen JLabel, welches deine Zahl anzeigt? =)
Code:
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();
}
}
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:
Code:
private int zahl;
private JLabel text = new JLabel(zahl);
@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:
Code:
String.valueOf(int x)
oder meinst du nicht?
edit: oder so wie Wildcard das vorgeschlagen hat (zu spät bin ich^^)
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?
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.
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:
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: