Swing String soll als Variable dienen

Java_Alex

Mitglied
Hallo zusammen,

ich bin der Alex und ich hoffe ihr könnte mir bei meinem Problem helfen. :rtfm: Das wäre echt super.

Ich programmiere zur Zeit ein kleines Spielchen mit Fragen und Antworten. In einer Klasse füge ich manuell mehrere Fragen, die später nach dem Zufallsprinzip angezeigt werden sollen. Dies geschieht durch Math.random(). Die Fragen sind in dem Variablennamen durchnummeriert. Nach Math.random() soll nun die gezogene Zahl mit dem dazugehörigen Namen in ein String zusammengesetzt werden und als Variable dienen.
Das funktioniert leider nicht so wie gedacht. Im JLabel oder auch JButton wird leider der Variablenname ausgegeben ("l_1_frage"), da müsste aber der Text ausgegeben werden, der hinter dieser Variablen steht ("Dies ist Frage Nummer 1"). Im Code steht erstmal nur eine Frage, somit wird immer die 1 gezogen.

Hier der Code:
Java:
public class Frage_100 
{
	String f_1_frage = "Dies ist Frage Nummer 1";
	String f_1_antwort_richtig = "richtige Antwort";
	String f_1_antwort_1 = "Falsch 1";
	String f_1_antwort_2 = "Falsch 2";
	String f_1_antwort_3 = "Falsch 3";
	
	int anzahl_fragen = 1;
	int frageauswahl;
	
	JLabel l_frage;
	JButton b_antwort_1, b_antwort_2, b_antwort_3, b_antwort_4;

	Frage_100(JLabel l_frage, JButton b_antwort_1, JButton b_antwort_2, JButton b_antwort_3, JButton b_antwort_4)
	{
		this.l_frage = l_frage;
		this.b_antwort_1 = b_antwort_1;
		this.b_antwort_2 = b_antwort_2;
		this.b_antwort_3 = b_antwort_3;
		this.b_antwort_4 = b_antwort_4;

		while(true)
		{
			frageauswahl = (int)(Math.random()*anzahl_fragen+1);
			System.out.println("Gezogene Zahl ist: "+frageauswahl);
			if(frageauswahl > 0 && frageauswahl <= anzahl_fragen)
			{
				System.out.println("Break!");
				break;
			}
			else
			{
				System.out.println("Continue");
				continue;
			}
		}
		
		if(frageauswahl > 0)
		{
			System.out.println("Sprung in die Fragezuordnung");
			String frage = "f_"+frageauswahl+"_frage"; // Hier wird der Variablenname zusammengesetzt
			String antwort_richtig = "f_"+frageauswahl+"_antwort_richtig";
			String antwort_1 = "f_"+frageauswahl+"_antwort_1";
			String antwort_2 = "f_"+frageauswahl+"_antwort_2";
			String antwort_3 = "f_"+frageauswahl+"_antwort_3";

			System.out.println(l_frage.getText());
			
			l_frage.setText(frage); // JLabel (hier wird "f_1_frage" ausgegeben, es sollte aber "Dies ist Frage Nummer 1" ausgegeben werden)
			b_antwort_1.setText(antwort_richtig); // JButton
			b_antwort_2.setText(antwort_1); // JButton
			b_antwort_3.setText(antwort_2); // JButton
			b_antwort_4.setText(antwort_3); // JButton
			
			System.out.println(l_frage.getText());
		}
	}
}
Ich habe hin und her probiert, aber leider funktioniert nichts. ???:L

Vielen Dank schon mal für eure Hilfe!:toll:
 
Zuletzt bearbeitet von einem Moderator:

Michael...

Top Contributor
Ich programmiere zur Zeit ein kleines Spielchen mit Fragen und Antworten. In einer Klasse füge ich manuell mehrere Fragen, die später nach dem Zufallsprinzip angezeigt werden sollen. Dies geschieht durch Math.random(). Die Fragen sind in dem Variablennamen durchnummeriert. Nach Math.random() soll nun die gezogene Zahl mit dem dazugehörigen Namen in ein String zusammengesetzt werden und als Variable dienen.
Falscher Ansatz! Schon mal mit Arrays oder Listen (z.B. ArrayList) gearbeitet? Die sind für so etwas gedacht. Hier könnte man die Fragen (als String oder sogar inkl. Antworten als Objekt) in einer Liste halten. Die einzelnen Fragen kann man dann mit einem Index (den man z.B. via Math.random()) ermittelt angesprochen werden.
 

Java_Alex

Mitglied
Falscher Ansatz! Schon mal mit Arrays oder Listen (z.B. ArrayList) gearbeitet? Die sind für so etwas gedacht. Hier könnte man die Fragen (als String oder sogar inkl. Antworten als Objekt) in einer Liste halten. Die einzelnen Fragen kann man dann mit einem Index (den man z.B. via Math.random()) ermittelt angesprochen werden.

Vielen Dank! Soweit habe ich garnicht gedacht :toll:
Mit ArrayList habe ich noch nicht gearbeitet, ich muss mich da erst mal erkundigen wie das funktioniert.
Aber gibt es denn überhaupt einen Weg, wie man einen String in eine Variable umwandeln kann?
 

Java_Alex

Mitglied
Grundsätzlich geht das mittels Reflection. Abgesehen davon, dass das hier aber hier schlichtweg falsch wäre, gibt es nur sehr wenige und spezifische Fälle bei denen der Einsatz von Reflection sinnvoll ist.

Mit Reflection habe ich am Wochenende einen ganzen Abend verbracht. Leider hatte es bei mir nicht funktioniert;(
Ich werde das nun mit ArrayList machen, ist echt viel sinnvoller. :toll:
Danke schööön!
 

Evil-Devil

Top Contributor
Ein anderer Weg wäre über Property Files. Da könntest du all deine Fragen und Antworten ablegen. Und den Namen der jeweiligen Property Variable wäre genau wie in der Liste dynamisch zusammensetzbar.
 

Java_Alex

Mitglied
Moinsen Leute!

Vielen Dank noch mal! Das mit dem ArrayList hat wunderbar funktioniert.

@Evil-Devil: Mit Property Files hätte man es auch machen können, aber ich habe mich doch für ArrayList entschieden. Ist echt eine super Lösung.

Jetzt läuft alles rund. Eine Frage hätte ich da aber noch wegen Stringübergabe in eine andere Klasse und überschrieben zurück.
Bei mir wird der String nicht überschrieben und es wird immer eine "null" ausgegeben. Bei einem JButton oder JLabel funktioniert es, aber nicht beim String.

Klasse A:

...
String richtige_frage = null;
JButton b_eins, b_zwei;
JLabel l_frage;

A(String title)
{
super(title);

b_eins = new JButton("Button 1");
b_zwei = new JButton("Button 2");
l_frage = new JLabel("Frage");
...
// Klick auf Button. Übergabe in die andere Klasse
new Klasse B(richtige_frage, b_eins, b_zwei, l_frage...)
...


Klasse B:

String richtige_frage;
JButton b_eins, b_zwei;
JLabel l_frage;

B(String richtige_frage, JButton b_eins, JButton b_zwei, JLabel l_frage....)
{
this.richtige_frage = richtige_frage;
this.b_eins = b_eins;
this.b_zwei = b_zwei;
this.l_frage = l_frage;

...

// Hier werden nun die Variablen gesetzt
richtige_frage = "Diese Variable soll nun dauerhaft diesen Text enthalten";
b_eins.setText("Irgendein Text");
b_zwei.setText("XYZ");
l_frage.setText("ZYX");
}

Nun die Frage. Also nach dieser Aktion und dem Klick auf den Button enthält meine Oberfläche die neuen Bezeichnungen für die Buttons und JLabel. Bei der String-Variablen funktioniert das nicht, da wird immer noch "null" ausgegeben. Warum ist das so? Funktioniert das bei den Strings mit der Konstruktorübergabe nicht? Muss man das hier mit setter und getter machen? Oder ist die Lösung viel simpler?

Ich habe das so gelößt, dass ich das nicht mit einer Stringvariablen mache sondern mit einem JLabel den ich in der Oberfläche nirgends geadded habe. Wieso funktioniert das nicht mit einem String?

Bitte um Hilfe.:oops:
 

Michael...

Top Contributor
Nun die Frage. Also nach dieser Aktion und dem Klick auf den Button enthält meine Oberfläche die neuen Bezeichnungen für die Buttons und JLabel. Bei der String-Variablen funktioniert das nicht, da wird immer noch "null" ausgegeben. Warum ist das so? Funktioniert das bei den Strings mit der Konstruktorübergabe nicht? Muss man das hier mit setter und getter machen? Oder ist die Lösung viel simpler?
Das hat jetzt nichts speziell mit Strings zu tun, sondern gilt in Java allgemein. Die Parameterübergabe erfolgt immer per "Call By Value" - ein "Call By Reference" welches Dein "String Problem" lösen würde gibt es nicht. Die Lösung ist tatsächlich den String - wie JButton und JLabel es ja machen - als Attribut eines Objektes zu implementieren und z.B. mittels setter und getter zu manipulieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P 2D-Grafik String übergeben, PNG soll rauskommen AWT, Swing, JavaFX & SWT 9
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
officialmaxl JavaFX Textfield getTextfield() in String speichern AWT, Swing, JavaFX & SWT 1
H String zu int/long AWT, Swing, JavaFX & SWT 8
D String als Textdatei in ausgewähltem Speicherplatz speichern AWT, Swing, JavaFX & SWT 32
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
J SWT Search string highlite AWT, Swing, JavaFX & SWT 5
M JavaFX String aus TextField reagiert nicht wie erwartet AWT, Swing, JavaFX & SWT 3
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
J Event Handling Input auf String testen, Fehlermeldung ausgeben AWT, Swing, JavaFX & SWT 4
D JavaFX ComboBox String setzen AWT, Swing, JavaFX & SWT 20
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
X Zeilen aus einer Textdatei einzelnd als String abrufen AWT, Swing, JavaFX & SWT 8
KilledByCheese Event Handling Vom ActionEvent auf String zugreifen - genaueres in der Beschreibung AWT, Swing, JavaFX & SWT 3
T replace string AWT, Swing, JavaFX & SWT 1
D String zu StringProperty Konvertieren AWT, Swing, JavaFX & SWT 4
T jTextField mit String befüllen AWT, Swing, JavaFX & SWT 1
E Eigenes TableModel für ArrayList<String[]> AWT, Swing, JavaFX & SWT 5
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
L Zwei String Array in eine Spalte einfügen AWT, Swing, JavaFX & SWT 1
P DefaultStyledDocument eingegebenen String durchsuchen und bestimmte Sachen einfärben AWT, Swing, JavaFX & SWT 1
B 2D-Grafik String drehen/platzieren/formatieren in bestimmten Bereich AWT, Swing, JavaFX & SWT 1
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
S XML Output String Format AWT, Swing, JavaFX & SWT 2
R Swing JTextField getText() liefert leeren String AWT, Swing, JavaFX & SWT 6
P Swing String mit unterschiedlichen Formaten zusammenbauen AWT, Swing, JavaFX & SWT 14
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
J 2D-Grafik String aus array wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
L Swing JToogleButton Vordergrundfarbe bei HTML String AWT, Swing, JavaFX & SWT 4
T Swing JProgressBar mit String unschön AWT, Swing, JavaFX & SWT 5
M Swing String zerlegen AWT, Swing, JavaFX & SWT 2
A Text (String) zu einer Box hinzufügen AWT, Swing, JavaFX & SWT 16
D textfeld string zu float AWT, Swing, JavaFX & SWT 5
B Color String Code AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
S String is null Fehler AWT, Swing, JavaFX & SWT 2
M SomeClass.class.getResourceAsStream(String filename) funktioniert nicht in jar) AWT, Swing, JavaFX & SWT 32
B JTable Component mit String? AWT, Swing, JavaFX & SWT 4
S String Array Ausgabe im JLabel ??? AWT, Swing, JavaFX & SWT 8
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
L SWT Text SelectionText ersetzen durch anderen String AWT, Swing, JavaFX & SWT 6
B Color.BLUE in String umwandeln AWT, Swing, JavaFX & SWT 4
H String auf Knopfdruck in JPanel zeichnen. AWT, Swing, JavaFX & SWT 6
A Formatierten String ausgeben (drawString) AWT, Swing, JavaFX & SWT 5
S Swing Grundprinzip String ausgeben, aber wie? AWT, Swing, JavaFX & SWT 6
R JComboBox Ausgabe in String speichern AWT, Swing, JavaFX & SWT 3
TiME-SPLiNTER Swing JListModel: String rendern AWT, Swing, JavaFX & SWT 2
R String in JFrame ausgeben AWT, Swing, JavaFX & SWT 10
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
C Swing Text eines JButton mit String definieren? Reihenfolge? AWT, Swing, JavaFX & SWT 6
S [Button] setText("String") AWT, Swing, JavaFX & SWT 5
1 BufferedImage in byte[], dann in String und zurück AWT, Swing, JavaFX & SWT 7
I String lowercase, uppercase und umdrehen AWT, Swing, JavaFX & SWT 3
D Swing JTextField String anhängen AWT, Swing, JavaFX & SWT 7
F Swing String Array mit JTextArea anzeigen AWT, Swing, JavaFX & SWT 13
P Canvas: String wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
T SWT String mitten ins Textfeld einfügen + richtige Cursorposition AWT, Swing, JavaFX & SWT 3
T Swing Wie kann ich einen String in ein TreePath umwandeln? AWT, Swing, JavaFX & SWT 5
H String ausführen und damit weiterarbeiten AWT, Swing, JavaFX & SWT 4
radiac AWT Mausposition als String ausgeben??? AWT, Swing, JavaFX & SWT 5
U Swing Eingabe von JTextField in einen String übergeben. AWT, Swing, JavaFX & SWT 3
N SWT Ende vom String in Text anzeigen AWT, Swing, JavaFX & SWT 5
B ActionEvent Dateipfad als String übergeben AWT, Swing, JavaFX & SWT 11
bugmenot JTextPane String stimmt nicht mit übergebenem String überein AWT, Swing, JavaFX & SWT 9
G JTextArea: String formatieren AWT, Swing, JavaFX & SWT 2
G Ein Wort in einem String färben in einer Canvas AWT, Swing, JavaFX & SWT 10
S List<String> in JTextArea! AWT, Swing, JavaFX & SWT 4
F kleines problem beim suchen in einem String AWT, Swing, JavaFX & SWT 15
G in JTextField wie in der Console Ein String ein lesen AWT, Swing, JavaFX & SWT 8
G Date in einen String umwandeln AWT, Swing, JavaFX & SWT 4
S schauen ob ein string leer ist AWT, Swing, JavaFX & SWT 4
B JTextPane und Image importieren in HTML String. AWT, Swing, JavaFX & SWT 2
S Suchen im String-Array AWT, Swing, JavaFX & SWT 3
mabe83 Swing: jTableCellRenderer -> Klappt nur bei String-Spalte AWT, Swing, JavaFX & SWT 2
O String aus Klasse X in Klasse Y befördern AWT, Swing, JavaFX & SWT 12
M leerzeichen aus string entfernen AWT, Swing, JavaFX & SWT 3
S String an eine andere Klasse im anderem package übergeben AWT, Swing, JavaFX & SWT 3
B NullPointerException bei String vergleich AWT, Swing, JavaFX & SWT 5
T String in String [] umwandeln?? AWT, Swing, JavaFX & SWT 4
S Checkbox oder String in JTable-Spalte AWT, Swing, JavaFX & SWT 4
E Frage zum String AWT, Swing, JavaFX & SWT 6
M BufferedImage mit html interpretierten String beschriften AWT, Swing, JavaFX & SWT 3
K Choice auswahl und String in Int AWT, Swing, JavaFX & SWT 8
Y entfernten String einer JTextPane per DocumentListener AWT, Swing, JavaFX & SWT 5
C string wird mehr fach gezeichnet AWT, Swing, JavaFX & SWT 3
S String aus JTextField AWT, Swing, JavaFX & SWT 11
B JTable String übergeben AWT, Swing, JavaFX & SWT 3
C string spiegeln AWT, Swing, JavaFX & SWT 14
M jEditorPane String to html AWT, Swing, JavaFX & SWT 2
A String aus einem JTextField an ein JLabel übergeben AWT, Swing, JavaFX & SWT 10
S double in String umwandeln AWT, Swing, JavaFX & SWT 6
R Double in der Tabelle statt String und Integer AWT, Swing, JavaFX & SWT 3
G ActionListener zu String hinzufügen AWT, Swing, JavaFX & SWT 2
I JProgressBar String anzeigen, danach wieder normale Ansicht AWT, Swing, JavaFX & SWT 3
G Quadratmeter im String darstellen AWT, Swing, JavaFX & SWT 2
F String aus JTextField AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben