CardLayout bei einem Quiz

Status
Nicht offen für weitere Antworten.

Recover

Mitglied
Hallo,

ich hab mir schon ein paar Threads zum Thema CardLayout durchgelesen. Einiges konnte ich auch in mein Programm
einarbeiten, nur leider gibt es da noch ein paar Probleme.
Mein JFrame ist in mehrere Panels aufgeteilt und nach dem drücken auf den Knopf soll eine neue Frage erscheinen...
Ich bin noch am Anfang des Programmes und somit wollte ich es erstmal beim Knopfdruck die Frage ändern lassen.
Leider erscheint beim anwenden des CardLayouts auf mein FragenPanel der Text nicht mehr.

Hat vielleicht jemand von euch eine Lösung für mich parat? Geht es vielleicht auch ohne CardLayout?

Anbei mein bisheriger Code:


Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class radio extends JFrame {

	//	Variablen
	
		private JPanel	ueberschriftPanel, fragenPanel, fragenPanel1, antwortenPanel, knopfPanel, punktePanel, cards;
		private JLabel	ueberschriftText, fragenText, punkteText, fragenText1;
		private JRadioButton	antwort1, antwort2, antwort3, antwort4, antwort5;
		private JButton	beep;
		
		
	radio()
	{
		super();
		this.setTitle("Quiz");
		this.setLayout(null);
		
	//	Überschrift
		
		ueberschriftPanel	=	new JPanel();
		ueberschriftPanel.setSize(90,50);
		ueberschriftPanel.setLocation(270,10);
		
		ueberschriftText	=	new JLabel("Das Quiz!");
		
		ueberschriftPanel.add(ueberschriftText);
		this.add(ueberschriftPanel);
			
			
//			Fragen
				
				fragenPanel			=	new JPanel();
				fragenPanel.setSize(200,200);
				fragenPanel.setLocation(20,100);
				fragenText			=	new JLabel();
				fragenText.setText("<html>Frage 1 von 25: 
Was steht hinter dem Bus?</html>");
				fragenPanel.add(fragenText);
				
				
				fragenPanel1			=	new JPanel();
				fragenPanel1.setSize(200,200);
				fragenPanel1.setLocation(20,100);
				fragenText1			=	new JLabel();
				fragenText1.setText("<html>Frage 2 von 25: 
Was steht vor dem Zug?</html>");
				fragenPanel1.add(fragenText1);
				
				cards				= new JPanel(new CardLayout());
						
				cards.add("a", fragenPanel);
				cards.add("b", fragenPanel1);
				
				
				fragenPanel.setBackground(new Color(24,24,244));
						
				this.add(cards);
		
		
		
	//	Antworten
		
		antwortenPanel		=	new JPanel();
		antwortenPanel.setSize(380,200);
		antwortenPanel.setLocation(230,100);
		antwortenPanel.setLayout(new GridLayout(5,1));
		
		antwort1			=	new JRadioButton("Antwort die 1.!");
		antwort2			=	new JRadioButton("Antwort die 2.!");
		antwort3			=	new JRadioButton("Antwort die 3.!");
		antwort4			=	new JRadioButton("Antwort die 4.!");
		antwort5			=	new JRadioButton("Antwort die 5.!");
		
		ButtonGroup		antwortenGroup	=	new		ButtonGroup();
		
		antwortenGroup.add(antwort1);
		antwortenGroup.add(antwort2);
		antwortenGroup.add(antwort3);
		antwortenGroup.add(antwort4);
		antwortenGroup.add(antwort5);
		
		antwortenPanel.add(antwort1);
		antwortenPanel.add(antwort2);
		antwortenPanel.add(antwort3);
		antwortenPanel.add(antwort4);
		antwortenPanel.add(antwort5);
		this.add(antwortenPanel);
		
		
		
	//	Knöpfe
		
		knopfPanel				=	new	JPanel();
		knopfPanel.setSize(150,50);
		knopfPanel.setLocation(400,350);
		
		beep					=	new JButton("weiter");		
		
		knopfPanel.add(beep);
		this.add(knopfPanel);
		
		
		
	//	Punkte
		
		punktePanel				=	new	JPanel();
		punktePanel.setSize(150,50);
		punktePanel.setLocation(70,350);
		punkteText				=	new	JLabel("Deine Punkte: ");
		
		punktePanel.add(punkteText);
		this.add(punktePanel);
		
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
		
		beep.addActionListener(new ActionListener() {
	        public void actionPerformed(ActionEvent e) {
	            Object source = e.getSource();
	            if(source==beep){
	                ((CardLayout)cards.getLayout()).show(cards, "b");
	            }
	        }});
		
	}
	
	
	
	
	
	
	public static void main(String[] args) 
	{
		radio fenster	= new radio();
		fenster.setSize(640,480);
		fenster.setLocation(350,200);
		
		fenster.setVisible(true);

	}
	
}
 

Recover

Mitglied
hat keiner ne lösung? sollte eigentlich ein geschenk für meine freundin zum jahrestag werden. ich weis nicht mehr weiter...
 

L-ectron-X

Gesperrter Benutzer
Hier mal ein Rohbau, den du entsprechend weiterentwickeln kannst:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Quiz extends JFrame {
   private JLabel headline, points;
   private JButton next;
   private JPanel mainPanel, cardPanel, panel;
   private Question1 quest1;
   private Question2 quest2;
   private CardLayout cards;

   public Quiz(String title) {
      super(title);
      setSize(600, 500);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      
      //Hauptpanel für äußeren Rahmen und alle Komponenten
      mainPanel = new JPanel(new BorderLayout());
      mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
      
      //Überschrift
      headline = new JLabel("<html><font size=5>Ein Quiz von ... für ...</font></html>");
      headline.setBorder(BorderFactory.createEmptyBorder(0, 0, 20, 0));
      headline.setHorizontalAlignment(SwingConstants.CENTER);
      mainPanel.add(headline, BorderLayout.NORTH);
      
      //Punktzahl-Label
      points = new JLabel("Deine Punkte: 0");

      //Weiter-Button
      next = new JButton("Weiter");
      next.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            cards.next(cardPanel);
         }
      });
      
      //Panel zum Tauschen und Anzeigen der Fragen
      cards = new CardLayout();
      cardPanel = new JPanel(cards);
      cardPanel.setBorder(BorderFactory.createEtchedBorder());
      
      quest1 = new Question1(this);
      quest2 = new Question2(this);
      cardPanel.add(quest1, "1");
      cardPanel.add(quest2, "2");
      
      //Punktzahl und Weiter-Button anordnen
      panel = new JPanel(new BorderLayout());
      panel.setBorder(BorderFactory.createEmptyBorder(20, 0, 0, 0));
      panel.add(points, BorderLayout.WEST);
      panel.add(next, BorderLayout.EAST);
      
      //Hauptpanel bestücken
      mainPanel.add(panel, BorderLayout.SOUTH);
      mainPanel.add(cardPanel, BorderLayout.CENTER);
      add(mainPanel, BorderLayout.CENTER);
   }

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {}
      new Quiz("Quiz").setVisible(true);
   }
}

Code:
import javax.swing.*;
import java.awt.*;

public class Question1 extends JPanel {
   private JRadioButton rb1, rb2, rb3;
   private ButtonGroup group;
   private JLabel question;
   private Quiz owner;
   
   public Question1(Quiz owner) {
      this.owner = owner;
      
      setLayout(new BorderLayout());

      group = new ButtonGroup();

      question = new JLabel("<html><font size=4>Frage 1: In welcher Programmiersprache wurde dieses Quiz erstellt?</font></html>");
      question.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
      
      JPanel panel = new JPanel(new GridLayout(0, 1));
      panel.setBorder(BorderFactory.createEmptyBorder(0, 60, 30, 20));
      
      rb1 = new JRadioButton("Antwort 1: Russisch");
      group.add(rb1);
      panel.add(rb1);
      
      rb2 = new JRadioButton("Antwort 2: Japanisch");
      group.add(rb2);
      panel.add(rb2);

      rb3 = new JRadioButton("Antwort 3: Java");
      group.add(rb3);
      panel.add(rb3);
      
      add(question, BorderLayout.NORTH);
      add(panel, BorderLayout.CENTER);
   }
}

Code:
import javax.swing.*;
import java.awt.*;

public class Question2 extends JPanel {
   private JRadioButton rb1, rb2, rb3;
   private ButtonGroup group;
   private JLabel question;
   private Quiz owner;

   public Question2(Quiz owner) {
      this.owner = owner;

      setLayout(new BorderLayout());

      group = new ButtonGroup();

      question = new JLabel("<html><font size=4>Frage 1: Welchen Namen sollte Java ursprünglich erhalten?</font></html>");
      question.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

      JPanel panel = new JPanel(new GridLayout(0, 1));
      panel.setBorder(BorderFactory.createEmptyBorder(0, 60, 30, 20));

      rb1 = new JRadioButton("Antwort 1: George");
      group.add(rb1);
      panel.add(rb1);

      rb2 = new JRadioButton("Antwort 2: Oak");
      group.add(rb2);
      panel.add(rb2);

      rb3 = new JRadioButton("Antwort 3: Elizabeth");
      group.add(rb3);
      panel.add(rb3);

      add(question, BorderLayout.NORTH);
      add(panel, BorderLayout.CENTER);
   }
}
 

Recover

Mitglied
momentan hab ich das problem, dass ich nicht weis wie ich es realisieren kann, die punktezahl bei einer richtigen antwort zu
erhöhen und bei einer falschen zu reduzieren...
kann mir da vielleicht jemand unter die arme greifen?
 

Recover

Mitglied
ich hab es grad mit vererbung probiert...
also quiz in der question klasse extended um beim drücken auf den weiter button die punktezahl zu erhöhen oder zu verringern....
aber irgendwie funzt das auch nicht so richtig :(
 

L-ectron-X

Gesperrter Benutzer
Probiere es mal mit einer statischen int-Variable, die einen Wert nach deiner Vorgabe addiert bzw. subtrahiert.
 

Recover

Mitglied
da hab ich ja dann aber immernoch das problem mit dem klassenübergreifen....
da müsste ich ja dann die 'Question' klasse von 'Quiz.java' ableiten....
weil ja der weiter button in der quiz klasse definiert ist und ich ja beim klicken darauf
prüfen muss ob der richtige radio button ausgewählt wurde....
 

L-ectron-X

Gesperrter Benutzer
Sorry, ich verstehe dein Problem nicht.
Schreib doch eine Klasse Evaluation (Auswertung), die eine statische int-Variable namens points (Punkte) und eine entsprechende Zugriffsmethode addPoints(int value) bzw. removePoints(int value) hält.
Je nach nach dem, welcher JRadioButton geklickt wurde kannst du doch nun Punkte vergeben oder abziehen...
z.B.
Code:
Evaluation.addPoints(5);
Bei der Schlussauswertung rufst du eine Methode
Code:
int points = Evaluation.getPoints();
auf, um die Gesamtpunktzahl zu ermitteln.
 

Recover

Mitglied
das mit dem punktezählen im hintergrund wäre ja kein problem...
aber die momentane punktezahl soll ja permanent in den einem Label angezeigt werden....
und ich weis halt nicht wie ich die punktzahl von den einzelnen fragenklassen (question) in die
anzeigeklasse (quiz) bekomme... :(
der quellcode ist im groben und ganzen noch deiner von da oben, den du mir netterweise zur
verfügung gestellt hast...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Von Menü: Seite zu Seite springen (CardLayout) AWT, Swing, JavaFX & SWT 8
H CardLayout beschränken AWT, Swing, JavaFX & SWT 2
P CardLayout funktioniert fehlerhaft AWT, Swing, JavaFX & SWT 13
L Java- CardLayout AWT, Swing, JavaFX & SWT 10
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
A Swing CardLayout - kein Wechsel möglich AWT, Swing, JavaFX & SWT 5
J CardLayout AWT, Swing, JavaFX & SWT 3
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
padde479 LayoutManager CardLayout wechselt die Karten nicht AWT, Swing, JavaFX & SWT 5
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
F CardLayout.show() funktioniert teilweise nicht AWT, Swing, JavaFX & SWT 5
F Swing Cardlayout aufräumen AWT, Swing, JavaFX & SWT 4
U CardLayout im Applet AWT, Swing, JavaFX & SWT 4
Q CardLayout und Klassenmethodenzugriff AWT, Swing, JavaFX & SWT 11
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
C CardLayout in BorderLayout? AWT, Swing, JavaFX & SWT 36
W Swing Probleme mit CardLayout AWT, Swing, JavaFX & SWT 28
D JMenuBar - CardLayout (Klasse anzeigen) AWT, Swing, JavaFX & SWT 3
D JSplitPane, Jtree, CardLayout (constraint must be a string) AWT, Swing, JavaFX & SWT 9
S LayoutManager Card des CardLayout mit MenuItem auswaehlen AWT, Swing, JavaFX & SWT 9
B RootPane bzw CardLayout Transparent machen AWT, Swing, JavaFX & SWT 7
L CardLayout - Show klappt nicht AWT, Swing, JavaFX & SWT 7
D Richtige implimentierung eines CardLayout AWT, Swing, JavaFX & SWT 3
P CardLayout - Anzeigeproblem AWT, Swing, JavaFX & SWT 2
I LayoutManager CardLayout mit anonymen Components AWT, Swing, JavaFX & SWT 4
Private Void LayoutManager Cardwechsel im CardLayout auch von Card aus? AWT, Swing, JavaFX & SWT 6
E LayoutManager Erster Versuch mit Cardlayout AWT, Swing, JavaFX & SWT 2
hdi LayoutManager Problem mit CardLayout AWT, Swing, JavaFX & SWT 11
C Problem mit CardLayout :( AWT, Swing, JavaFX & SWT 10
Dragonfire Swing CardLayout Maximum Size AWT, Swing, JavaFX & SWT 7
klattiator CardLayout - Cards auf Existenz prüfen AWT, Swing, JavaFX & SWT 3
S Frage/Problem CardLayout AWT, Swing, JavaFX & SWT 2
H CardLayout - Card erstellen hinzufügen usw. bis MI (12.3.) AWT, Swing, JavaFX & SWT 2
F CardLayout.show() -> NullPointerException AWT, Swing, JavaFX & SWT 4
G CARDLAYOUT AWT, Swing, JavaFX & SWT 2
D GroupLayout an un plötzlich is CardLayout Funktion tot? AWT, Swing, JavaFX & SWT 10
J CardLayout AWT, Swing, JavaFX & SWT 10
J CardLayout AWT, Swing, JavaFX & SWT 2
J Hilfe CardLayout AWT, Swing, JavaFX & SWT 3
H Cardlayout AWT, Swing, JavaFX & SWT 3
M CardLayout: Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Dialogfenster wird nicht aktualisiert/CardLayout AWT, Swing, JavaFX & SWT 6
m@nu StackOverflowError mit CardLayout? AWT, Swing, JavaFX & SWT 2
J Designfehler beim CardLayout() AWT, Swing, JavaFX & SWT 4
S Registerkarte mit CardLayout (AWT) erstellen ? AWT, Swing, JavaFX & SWT 6
D CardLayout Plus ? AWT, Swing, JavaFX & SWT 4
T CardLayout Ohne Cards/Reiter AWT, Swing, JavaFX & SWT 2
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
S Swing zu einem Datum Tage addieren/subtrahieren AWT, Swing, JavaFX & SWT 6
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
H JComobox in einem JPopupNeu AWT, Swing, JavaFX & SWT 7
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
F JavaFX Checken ob der Input einem festgelegten Format gleicht AWT, Swing, JavaFX & SWT 7
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
cool_brivk24 BufferedImage einem ClickEvent hinzufügen AWT, Swing, JavaFX & SWT 13
Q-bert Doppelclick auf einem List item AWT, Swing, JavaFX & SWT 9
J JavaFX von einem Array aus Buttons herausfinden auf welcher geklickt wurde aus dem Array. AWT, Swing, JavaFX & SWT 1
C SWT autosize bei gc.drawString() auf einem Label AWT, Swing, JavaFX & SWT 7
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
heinz ketchup While-Schleife in einem Service für GUI AWT, Swing, JavaFX & SWT 22
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben