Swing Fensterinhalt aktualisieren

Ballu

Mitglied
Hallo,

ich bin noch rellativ neu in java und habe eine Frage bezüglich der GUI. Ich habe eine GUI erstellt und jetzt möchte ich den Fensterinhalt mit neuen Variableninhalt neu laden:

erstmal die beiden Klassen:
Java:
package testGUI;

import javax.swing.*;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import java.util.HashMap;
import java.util.Map;

public class Question extends JFrame implements ActionListener {
	// Fragen und Antworten
	Map<Integer, String> question = new HashMap<Integer, String>();
	Map<Integer, String> answer = new HashMap<Integer, String>();

	Random r = new Random();
	int nummerfrage = r.nextInt(26) + 1;
	int punkte = 0;
	int anzahlfrage = 1;
	String fragegui = "Hier sollte die Frage stehen ...";

	public void frageneinlesen() {
           //30 Fragen mit answer.put(laufendeNummer,"Frage");
	}

	public void antworteneinlesen() {

           //30 Antworten mit answer.put(laufendeNummer,"Antwort");
	}

	public void frage_finden() {
		for (Map.Entry<Integer, String> entry : answer.entrySet()) {
			if (entry.getKey() == nummerfrage) {
				fragegui = entry.getValue();
			}
		}
	}

	JPanel cp;
	JLabel anzahlfragen = new JLabel("Frage: " + anzahlfrage + "/8");
	JLabel anzahlpunkte = new JLabel("Punkte: " + punkte + "/8");
	JLabel frageLabel = new JLabel(fragegui);
	JLabel antwortLabel = new JLabel("Antwort:");
	JTextField antwortfeld = new JTextField();
	JButton continueButton = new JButton("Weiter");
	JButton exitButton = new JButton("Beenden");

	public void initGUI() {
		JPanel p = (JPanel) this.getContentPane();

		p.setLayout(null);

		frageLabel.setBounds(20, 5, 550, 30);
		p.add(frageLabel);

		antwortLabel.setBounds(20, 50, 110, 30);
		p.add(antwortLabel);

		antwortfeld.setBounds(90, 50, 400, 30);
		p.add(antwortfeld);

		anzahlfragen.setBounds(20, 75, 100, 50);
		p.add(anzahlfragen);

		anzahlpunkte.setBounds(150, 75, 100, 50);
		p.add(anzahlpunkte);

		continueButton.setBounds(20, 130, 110, 20);
		p.add(continueButton);

		exitButton.setBounds(450, 130, 110, 20);
		p.add(exitButton);

		continueButton.addActionListener(this);
		exitButton.addActionListener(this);
	}

	public Question() {
		int random = 1;
		frageneinlesen();
		antworteneinlesen();
		frage_finden();
		this.setTitle("Test der Allgemeinbildung");
		this.setSize(600, 200);
		initGUI();
	}
	@Override
	public void actionPerformed(ActionEvent event) {
		Object source = event.getSource();
		if (source == continueButton) {
			String antwort = "";
			for (Map.Entry<Integer, String> entry : answer.entrySet()) {
				if (entry.getKey() == nummerfrage) {
					antwort = entry.getValue();
				}
				if (antwortfeld.getText().contains(antwort))
					punkte++;

			}
		}
		if (source == exitButton) {
			// beenden
			System.exit(0);
		}
	}

}
Java:
package testGUI;

import testGUI.Question;

public class Run_Question {

	public static void main(String[] args) {
		//erste Idee/Test mit festen Größen
		int anzahlfrage = 9;
		for (int i = 5; i < 10; i++){
			Question fragebogen = new Question();
			fragebogen.setLocation(400, 300);
			fragebogen.setVisible(true);
		}
	}

}

Jetzt hab ich 1 Problem und eine Frage: Das Problem:
Java:
	public Question() {
		int random = 1;
		frageneinlesen();
		antworteneinlesen();
		frage_finden();
		this.setTitle("Test der Allgemeinbildung");
		this.setSize(600, 200);
		initGUI();
	}
Bei der Ausgabe der GUI wird die Variable fragegui nicht überschieben.
Die Frage: Ich möchte grundsätzlich, dass ich mit der Random Klasse eine zufallszahl im Bereich von 1 und 22 erzeuge. Diese Variable soll die Keyvalue der ersten Frage sein, danach sollen die 7 folgenden Fragen die insgesammt 8 Fragen des Quizes sein. Und jetzt ist nur die Frage, wie ich das mache, dass der Fensterinhalt mit den neuen Werten neu geladen wird.
 
G

Gast2

Gast
Du musst ja nicht bei jeder neuen Frage die komplette GUI erneuern. Es reicht doch wenn du einfach die Texte der JLabels änderst oder nicht?
 

Ballu

Mitglied
Ja sicher würde das reichen, aber müsste ich den Teil:
Java:
    JPanel cp;
    JLabel anzahlfragen = new JLabel("Frage: " + anzahlfrage + "/8");
    JLabel anzahlpunkte = new JLabel("Punkte: " + punkte + "/8");
    JLabel frageLabel = new JLabel(fragegui);
    JLabel antwortLabel = new JLabel("Antwort:");
    JTextField antwortfeld = new JTextField();
    JButton continueButton = new JButton("Weiter");
    JButton exitButton = new JButton("Beenden");

nicht in ein eigene Methode packen und Variablen mit Übergeben?
 

bERt0r

Top Contributor
Nein, die Texte von Komponenten kannst du mit setText(String text) zur Laufzeit ändern. Ganz ohne new. Dazu ist es natürlich notwendig, dass du eine Referenz auf den Komponent hältst, also am besten die Komponenten als Klassenvariable deklarieren.
 

Ballu

Mitglied
Ok ich hab es jetzt so geändert:
Java:
		int nummerfrage = 0;
		int punkte = 0;
		int anzahlfrage = 0;
		String fragegui = "Hier sollte die Frage stehen -.-";
		String fixedword_Frage ="Frage: ";
		String fixedword_Punkte ="Punkte: ";
		String fixedword_Antwort ="Antwort: ";
		String fixedword_Weiter ="Weiter";
		String fixedword_Beenden ="Beenden";
		
		public static void GUILabels(int punkte,int anzahlfrage, String fixedword_Frage,String fixedword_Punkte, String fixedword_Antwort,String fixedword_Weiter,String fixedword_Beenden,String fragegui){
		JPanel cp;
		JLabel anzahlfragen = new JLabel(fixedword_Frage + anzahlfrage + "/8");
		JLabel anzahlpunkte = new JLabel(fixedword_Punkte + punkte + "/8");
		JLabel frageLabel = new JLabel(fragegui);
		JLabel antwortLabel = new JLabel(fixedword_Antwort);
		JTextField antwortfeld = new JTextField();
		JButton continueButton = new JButton(fixedword_Weiter);
		JButton exitButton = new JButton(fixedword_Beenden);
		}

allerdings sagt jetzt public void initGUI(), dass er die ganzen Labels und Co nicht findet, wenn ich es zu public void initGUI(GUILabels()) ändere sagt er missplaced contructors. ...
 

Paddelpirat

Bekanntes Mitglied
In deinem letzten Post sind die Labels etc ja auch nur noch lokal für diese eine Methode definiert.

Du solltest sie wieder aus der Methode holen, wie in deinem ersten Post und dann sowas in der Art machen:

Java:
public static void setGUILabels(int punkte,int anzahlfrage, String fixedword_Frage,String fixedword_Punkte, String fragegui){
        
        anzahlfragen.setText(fixedword_Frage + anzahlfrage + "/8");
        anzahlpunkte.setText(fixedword_Punkte + punkte + "/8");
        frageLabel.setText(fragegui);
        }

Und dann rufst du die Methode
Code:
setGUILabels
auf, wenn du die Texte ändern möchtest.

Schau dir am besten auch nochmal Namenskonventionen in Java an. Der obige Code ist nicht wirklich schön ;-)
 

Ballu

Mitglied
Bist du sicher mit dem static? Weil ich bekomme die Fehlermeldung, dass er keine Statische Methode für ein nicht Statisches Feld erzeugen kann, ohne static gehts.
 

Ballu

Mitglied
Der aktuelle Stand:
Java:
package quiz;

import javax.swing.*;

import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import java.util.HashMap;
import java.util.Map;

public class Quiz extends JFrame implements ActionListener {
	// Fragen und Antworten
		Map<Integer, String> question = new HashMap<Integer, String>();
		Map<Integer, String> answer = new HashMap<Integer, String>();
		
		public int setStart(){
		Random r = new Random();
		return r.nextInt(21)+1;
		}
		
		int nummerfrage = 0;
		int punkte = 0;
		int anzahlfrage = 1;
		String fragegui = "Hier sollte die Frage stehen -.-";
		String fixedword_Frage ="Frage: ";
		String fixedword_Punkte ="Punkte: ";
		String fixedword_Antwort ="Antwort: ";
		String fixedword_Weiter ="Weiter";
		String fixedword_Beenden ="Beenden";
		
		JPanel cp;
		JLabel anzahlfragen = new JLabel(fixedword_Frage + anzahlfrage + "/8");
		JLabel anzahlpunkte = new JLabel(fixedword_Punkte + punkte + "/8");
		JLabel frageLabel = new JLabel(fragegui);
		JLabel antwortLabel = new JLabel(fixedword_Antwort);
		JTextField antwortfeld = new JTextField();
		JButton continueButton = new JButton(fixedword_Weiter);
		JButton exitButton = new JButton(fixedword_Beenden);
		
		public void setGUILabels(int punkte,int anzahlfrage, String fixedword_Frage,String fixedword_Punkte, String fragegui){
        anzahlfragen.setText(fixedword_Frage + anzahlfrage + "/8");
        anzahlpunkte.setText(fixedword_Punkte + punkte + "/8");
        frageLabel.setText(fragegui);
		}
		public void frageneinlesen() {
			question.put(1,"Die vier großen Energieunternehmen in Deutschland sind E.on,E, Vattenfall und ...");
			question.put(2, "Was der DAX für Frankfurt, ist der FTSE für ...");	
                //usw		
		}

		public void antworteneinlesen() {
			answer.put(1, "enbw");
			answer.put(2, "athen");
                         //usw
		}

		public String frage_finden(int randomstart) {
			for (Map.Entry<Integer, String> entry : question.entrySet()) {
				if (entry.getKey() == randomstart) {
					fragegui = entry.getValue();
				}
			}
			return fragegui;
		}


		public void initGUI() {
			JPanel p = (JPanel) this.getContentPane();

			p.setLayout(null);

			frageLabel.setBounds(20, 5, 550, 30);
			p.add(frageLabel);

			antwortLabel.setBounds(20, 50, 110, 30);
			p.add(antwortLabel);

			antwortfeld.setBounds(90, 50, 400, 30);
			p.add(antwortfeld);

			anzahlfragen.setBounds(20, 75, 100, 50);
			p.add(anzahlfragen);

			anzahlpunkte.setBounds(150, 75, 100, 50);
			p.add(anzahlpunkte);

			continueButton.setBounds(20, 130, 110, 20);
			p.add(continueButton);

			exitButton.setBounds(450, 130, 110, 20);
			p.add(exitButton);

			continueButton.addActionListener(this);
			exitButton.addActionListener(this);
		}

		public Quiz(int nr_der_frage) {
			frageneinlesen();
			antworteneinlesen();
			frage_finden(nr_der_frage);
			setGUILabels(punkte,anzahlfrage, fixedword_Frage, fixedword_Punkte,fragegui);
			this.setTitle("Test der Allgemeinbildung");
			this.setSize(600, 200);
			initGUI();
		}

		@Override
		public void actionPerformed(ActionEvent event) {
			Object source = event.getSource();
			if (source == continueButton) {
				String antwort = "";
				for (Map.Entry<Integer, String> entry : answer.entrySet()) {
					if (entry.getKey() == nummerfrage) {
						antwort = entry.getValue();
					}
					if (antwortfeld.getText().toLowerCase().contains(antwort))
						punkte++;

				}
			}
			if (source == exitButton) {
				// beenden
				System.exit(0);
			}
		}

	}

Java:
package quiz;

import java.util.Random;

import beleg3.Quiz;

public class Run_Quiz {

	public static void main(String[] args) throws InterruptedException {
		Random r = new Random();
		int randomstart = r.nextInt(21)+1;
            
			Quiz fragebogen = new Quiz(randomstart);
            fragebogen.setLocation(400, 300);
            fragebogen.setVisible(true);
        }
		
	}

Das Resultat: Es wird die richtige Frage in bezug auf die Zufallszahl ausgegeben und alles richtig angezeigt.
 

Paddelpirat

Bekanntes Mitglied
Sorry, das
Code:
static
kam noch von copy & paste aus deinem Post. Deine etwas komische Methode
Code:
GUILabels
war auch
Code:
static
. Aber du hast es ja hin bekommen. ;-)
 

Ballu

Mitglied
Jop ;)

noch ein Nachtrag der mir aufgefallen ist:

Java:
 public Quiz(int nr_der_frage) {
            nummerfrage = nr_der_frage;
            frageneinlesen();
....
}
damit auch die richtige Nummer der aktuelle Frage immer wieder überschrieben wird.
Jetzt ist nur noch dir Frage offen, nach dem aktualisieren der GUI mit den neuen Werten ...
 

Paddelpirat

Bekanntes Mitglied
Mal auf die schnelle, so in etwa:

Java:
    public void actionPerformed(ActionEvent event) {
        Object source = event.getSource();
        if (source == continueButton) {
            String antwort = "";
            for (Map.Entry<Integer, String> entry : answer.entrySet()) {
                if (entry.getKey() == nummerfrage) {
                    antwort = entry.getValue();
                }
                if (antwortfeld.getText().toLowerCase().contains(antwort)) {
                    punkte++;
                }

            }
            anzahlfrage++;
            setGUILabels(punkte, anzahlfrage, fixedword_Frage, fixedword_Punkte, fragegui);
            
        }
        if (source == exitButton) {
            // beenden
            System.exit(0);
        }
    }

Funktioniert natürlich noch nicht alles so wie du es sicherlich haben willst. Aber durch aufrufen der Methode
Code:
setGUILabels
in diesem Abschnitt kannst du deine Texte aktualisieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Swing Fensterinhalt verändern AWT, Swing, JavaFX & SWT 3
J Fensterinhalt bei Klick auf Menüitem wechseln AWT, Swing, JavaFX & SWT 1
R Fensterinhalt erscheint erst, wenn das Fenster verändert wird AWT, Swing, JavaFX & SWT 7
Junker Fensterinhalt vor ausführen von repaint komplett löschen. AWT, Swing, JavaFX & SWT 2
O Fensterinhalt löschen und neu generieren AWT, Swing, JavaFX & SWT 2
M Windows-Fensterinhalt in Java-Applikation darstellen AWT, Swing, JavaFX & SWT 6
G Anfängerfrage: Fensterinhalt ändern AWT, Swing, JavaFX & SWT 4
I Fensterinhalt drucken AWT, Swing, JavaFX & SWT 2
K [SWT] Fensterinhalt ändern. AWT, Swing, JavaFX & SWT 2
B Fensterinhalt baut sich erst bei Größenveränderung auf AWT, Swing, JavaFX & SWT 3
G bild aus fensterinhalt AWT, Swing, JavaFX & SWT 5
C Default table model aktualisieren AWT, Swing, JavaFX & SWT 7
G JavaFX BarChart während der Runtime aktualisieren AWT, Swing, JavaFX & SWT 4
T TableView aktualisieren AWT, Swing, JavaFX & SWT 1
W JavaFX TableView aktualisieren AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
J JavaFX Label aktualisieren AWT, Swing, JavaFX & SWT 18
M Muss man die ObservableList aktualisieren? AWT, Swing, JavaFX & SWT 3
B Bounds aller Panels aktualisieren AWT, Swing, JavaFX & SWT 0
-DD Lobby/Spielerliste aktualisieren bei Suche AWT, Swing, JavaFX & SWT 1
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
M JavaFX Automatisches Aktualisieren der Seite AWT, Swing, JavaFX & SWT 26
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
H JavaFX - Label aktualisieren AWT, Swing, JavaFX & SWT 1
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
J Tableview Daten hinzufügen und aktualisieren AWT, Swing, JavaFX & SWT 5
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
C JavaFX TreeTableView aktualisieren AWT, Swing, JavaFX & SWT 10
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
thobren JavaFX textarea nach setPrefRowCount Ansicht aktualisieren AWT, Swing, JavaFX & SWT 1
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
H Combobox aktualisieren AWT, Swing, JavaFX & SWT 2
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
L GUI - Jpanel - Splitpane will nicht aktualisieren AWT, Swing, JavaFX & SWT 4
2 Zeit Differenz automatisch aktualisieren AWT, Swing, JavaFX & SWT 1
N JavaFX Stage aktualisieren AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
AssELAss Verzeichnis JFileChooser aktualisieren AWT, Swing, JavaFX & SWT 0
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
T Int-Wert aktualisieren? AWT, Swing, JavaFX & SWT 9
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
S Combobox aktualisieren AWT, Swing, JavaFX & SWT 3
M Swing Aktualisieren eines JPanels nach Tasteneingabe AWT, Swing, JavaFX & SWT 2
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
J GUI/Random aktualisieren? AWT, Swing, JavaFX & SWT 3
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
P Swing Aktualisieren von JFrame in einem onClick-Ereignis AWT, Swing, JavaFX & SWT 11
B JTable aktualisieren AWT, Swing, JavaFX & SWT 22
K SWT DataBinding, Anzahl der Zeilen aktualisieren AWT, Swing, JavaFX & SWT 4
G JRadioButton aktualisieren nicht... AWT, Swing, JavaFX & SWT 10
C ToolTip aktualisieren AWT, Swing, JavaFX & SWT 2
D Swing JComboBox aktualisieren AWT, Swing, JavaFX & SWT 4
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
S Inhalt einer JComboBox aktualisieren AWT, Swing, JavaFX & SWT 6
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
A Swing Aktualisieren eines JPanels AWT, Swing, JavaFX & SWT 13
A JButton in einem Array aktualisieren AWT, Swing, JavaFX & SWT 8
Kenan89 JTable aktualisieren AWT, Swing, JavaFX & SWT 21
S Spezielle komponente aktualisieren AWT, Swing, JavaFX & SWT 9
V Swing JProgressBar aktualisieren AWT, Swing, JavaFX & SWT 14
C Combobox bei Tabellenänderung mit aktualisieren AWT, Swing, JavaFX & SWT 11
C jTable aktualisieren AWT, Swing, JavaFX & SWT 2
M TabbpedPane Anzeige aktualisieren AWT, Swing, JavaFX & SWT 6
X Swing JTree aktualisieren AWT, Swing, JavaFX & SWT 2
P AWT Fenster aktualisieren, nachdem ich JComboBox ändere AWT, Swing, JavaFX & SWT 9
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
D Elternfenster vom JDialog aktualisieren oder nicht ? AWT, Swing, JavaFX & SWT 7
O JFrame: Daten alle paar Sekunden aktualisieren AWT, Swing, JavaFX & SWT 3
M Swing JLabel (mit einer Grafik) aktualisieren AWT, Swing, JavaFX & SWT 2
S JTable - Aktualisieren / Neu zeichnen. AWT, Swing, JavaFX & SWT 5
C Daten aus DB -> JTable aktualisieren klappt nicht AWT, Swing, JavaFX & SWT 16
M Zeichnung aktualisieren AWT, Swing, JavaFX & SWT 3
D Swing JTextField aus anderer Klasse aktualisieren AWT, Swing, JavaFX & SWT 2
L GUI aktualisieren? AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
V Panel/Icon aktualisieren AWT, Swing, JavaFX & SWT 10
R JFreeChart aktualisieren wenn sich die Ausgangsdaten ändern AWT, Swing, JavaFX & SWT 8
M Swing Aktualisieren von laufenden Anwendungen AWT, Swing, JavaFX & SWT 10
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Swing Probleme beim Aktualisieren einer JComboBox nach Auswahländerung AWT, Swing, JavaFX & SWT 2
J JLabel aktualisieren AWT, Swing, JavaFX & SWT 8
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
K Swing JTable Model aktualisieren AWT, Swing, JavaFX & SWT 2
K LayoutManager Borderlayout - NORTH aktualisieren AWT, Swing, JavaFX & SWT 10
C JMenuBar aktualisieren? AWT, Swing, JavaFX & SWT 2
K JTable aktualisieren AWT, Swing, JavaFX & SWT 9
M JFrame aktualisieren/refreshen? AWT, Swing, JavaFX & SWT 4
A Haupt JFrame inkl. aller Komponenten aktualisieren? AWT, Swing, JavaFX & SWT 3
L Swing Daten in JTable aktualisieren AWT, Swing, JavaFX & SWT 5
S Swing JTable nach einer Änderung einer Zelle komplett aktualisieren. AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben