Auswertung eines Testes funktioniert nicht

Lea

Mitglied
Hallo, ich möchte bei einem Test in dem die Beantwortung von verschiedenen Fragen zu einem bestimmten Ergebnis führen sollten. Mein Problem ist, dass die zugewiesenen Punkte aus der if nicht übernommen werden. Es wird immer der Punktestand 0 ausgegeben.
 

Anhänge

  • test.png
    test.png
    71,7 KB · Aufrufe: 54
  • fram.png
    fram.png
    75 KB · Aufrufe: 50
Also ich habe eine Art Test erstellt, wobei der Benutzer fragen beantwortet. Er hat bei jeder Frage drei Antwortmöglichkeiten zur Auswahl. Durch RadioButtons kann er auch nur einen auswählen. Nun wird durch einen Knopf die nächste Frage in einem neune Frame geöffnet. Ich möchte das der Benutzer 0 Punkte bekomt, wenn er den ersten R_Button auswählt, 1 Punkt wenn er den zweiten R_Button auswählt und 2 Punkte wen er den dritten R_Button auswählt. (Dies habe ich in einer IF gemacht). Jedoch wird dann immer nur der Punktestand von 0 ausgegeben.
 
DerWissende hat recht. Wenn du deinen Code hier ganz normal als Quelcode deutlich machst und uns von Anfang an mehr Code gibst kann dir schneller geholfen werden.
Gib mir bitte zumindest das Fenster sowie die Logik dahinter als Code

LG
 
[code = Java]
import javax.swing.event.*;

/**
*
* Beschreibung
*
* @version 1.0 vom 26.06.2017
* @author
*/

public class Test extends JFrame {
// Anfang Attribute
private JLabel label_ueberschrift = new JLabel();
private JLabel label_u2 = new JLabel();
private JLabel jLabel1 = new JLabel();
private JLabel jLabel2 = new JLabel();
private JButton button_los = new JButton();
// Ende Attribute


public Test(String title) {
// Frame-Initialisierung
super(title);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 462;
int frameHeight = 462;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten

label_ueberschrift.setBounds(40, 24, 355, 41);
label_ueberschrift.setText("AB IN DEN URLAUB");
label_ueberschrift.setOpaque(true);
label_ueberschrift.setHorizontalAlignment(SwingConstants.CENTER);
label_ueberschrift.setBackground(Color.YELLOW);
cp.add(label_ueberschrift);
label_u2.setBounds(40, 64, 355, 41);
label_u2.setText("DEIN NÄCHSTES REISEZIEL !!");
label_u2.setHorizontalAlignment(SwingConstants.CENTER);
label_u2.setOpaque(true);
label_u2.setBackground(Color.YELLOW);
cp.add(label_u2);
jLabel1.setBounds(16, 152, 419, 57);
jLabel1.setText(" In diese Test findest du mit uns gemeinsam dein perfektes Reiseziel ! ");
jLabel1.setOpaque(true);
jLabel1.setBackground(Color.YELLOW);
cp.add(jLabel1);
jLabel2.setBounds(16, 192, 419, 57);
jLabel2.setText("Durch ein paar einfache Fragen suchen wir dein individuelles Traumziel ");
jLabel2.setOpaque(true);
jLabel2.setBackground(Color.YELLOW);
cp.add(jLabel2);
button_los.setBounds(160, 264, 161, 89);
button_los.setText("Los gehts !!!");
button_los.setMargin(new Insets(2, 2, 2, 2));
button_los.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button_los_ActionPerformed(evt);
}
});
button_los.setBackground(new Color(0xFFC800));
cp.add(button_los);
cp.setBackground(new Color(0xB8CFE5));


// Ende Komponenten

setVisible(true);
} // TODO hier Quelltext einfügen

//Globale Variable
static int punkte = 0;

// Anfang Methoden

public static int getpunkte() {
return punkte;

}

// Als Static deklariern. Die methode ist so nicht an ein Objekt gebunden, sondern an die Klasse "Test"
public static void setpunkte(int punketausframe) {

punkte = punkte + punketausframe;


}


public void button_los_ActionPerformed(ActionEvent evt) {
Frame2 f2 = new Frame2();

f2.setVisible(true);

dispose();

}


// Ende Methoden

public static void main(String[] args) {
new Test("Test");


}
}
[/code]
 
Soory ich kenn mich nicht so gut damit aus, dass ist jetzt meine erste Frame und das meine zweite
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Frame2 extends JFrame {

private JLabel label_frage_1 = new JLabel();
private JLabel label_frage = new JLabel();

private JButton jButton1 = new JButton();
private JRadioButton rbutton1 = new JRadioButton();
private JRadioButton rbutton2 = new JRadioButton();
private JRadioButton rbutton3 = new JRadioButton();
private ButtonGroup jButtonGroup1 = new ButtonGroup();

public Frame2() {


int frameWidth = 462;
int frameHeight = 462;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);


//Anfang Komponenten

getContentPane().add(new JLabel());
label_frage_1.setText("Frage 1");
label_frage_1.setBounds(40, 24, 355, 41);
label_frage_1.setOpaque(true);
label_frage_1.setHorizontalAlignment(SwingConstants.CENTER);
cp.add(label_frage_1);
setVisible(true);


label_frage.setText("Wähle ein Alterszeitraum");
label_frage.setBounds(8, 48, 243, 49);
label_frage.setOpaque(true);
label_frage.setHorizontalAlignment(SwingConstants.LEFT);
cp.add(label_frage);
setVisible(true);



rbutton1.setText("14 - 25 Jahre");
rbutton1.setBounds(8, 128, 147, 41);
jButtonGroup1.add(rbutton1);
cp.add(rbutton1);
rbutton2.setText("25 - 35 Jahre");
rbutton2.setBounds(8, 184, 163, 41);
jButtonGroup1.add(rbutton2);
cp.add(rbutton2);
rbutton3.setText("über 35 Jahre");
rbutton3.setBounds(8, 240, 171, 41);
jButtonGroup1.add(rbutton3);
cp.add(rbutton3);



jButton1.setBounds(144, 320, 193, 49);
jButton1.setText("Nächste Frage");
jButton1.setMargin(new Insets(2, 2, 2, 2));
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton1_ActionPerformed(evt);
}
});
cp.add(jButton1);

//Ende Komponeten
setVisible(true);

}

int punkte = 0;


//Anfnag Methode

public String getSelectedRadioButton(ButtonGroup bg) {
for (java.util.Enumeration<AbstractButton> e = bg.getElements(); e.hasMoreElements()😉 {
AbstractButton b = e.nextElement();
if (b.isSelected()) return b.getText();
}
return null;
}


public void bt_1_ActionPerformed(ActionEvent evt) {
if (rbutton1.isSelected()) {


punkte = 0;


} // end of if
else if (rbutton2.isSelected()) {

punkte = punkte +1;


} // end of if
else {

punkte = punkte + 2;

} // end of if-else

}


public void jButton1_ActionPerformed(ActionEvent evt) {

//Vor öffnen des nächsten Frame, übertragen der Punkte
//Methode der Klasse Test aufrufen

Test.setpunkte(punkte);

System.out.println(Test.getpunkte());

Frame3 f3 = new Frame3();

f3.setVisible(true);

dispose();


} // end of jButton1_ActionPerformed



// Ende Methoden
}
 
Nah dran nur den [ code = java ] ohne Lehrzeichen.

Ja ich denke damit kann man was anfangen. Du weißt in Zeile 79 von Frame2 dem jButton1 einen ActionListener zu.
Die Methode die du aufrufst ist "jButton1_ActionPerformed" allerdings wertet diese Methode nicht die Punkte aus. Das heißt, die Methode die deine Punkte bestimmt, wird nie ausgeführt. Punkte ist immer null, da du ganz am Anfang sagt "int punkte = 0".

Java:
jButton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                System.out.println("Frame2--> Frame2()--> new ActionListener--> Button1 pressed");
                bt_1_ActionPerformed(evt);
                jButton1_ActionPerformed(evt);
            }
        });

Damit hast du das richtige ergebnis 😉
 
oh oki super vielen Danke 😀 Dies mache ich dann bei jeder Frage so, und addiert es dann die Punkte aus jeder Frage zusammen, dass am Ende dann ein Ergebnis von beispielsweise 5 Punkten heraus ?
 
ok vielen vielen dank 😀 Hab noch ne Frage wenn das ok ist.
Wie kann ich ein Bild welches ich ganz einfach gespeichert habe in ein JLabel einfügen ?
 
Möchte anstatt dem Text "Strandbild" ein echtes Strandbild einfügen. Versuche es nochmal mit dem Code🙂
Java:
label_antwort_1.setText("Strandbild");
    label_antwort_1.setBounds(8,128,147,41);
    label_antwort_1.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_antwort_1);
    setVisible(true);
 
Bitte gerne 🙂
So:
Java:
ImageIcon image = new ImageIcon("C:/Documents and Settings/user/Desktop/hi/xD/JavaApplication2/image.png");
JLabel imagelabel = new JLabel(image );

Oder alternativ

Java:
imagelabel.setImageIcon(image)

Wenn du das Bild skalieren möchtest empfehle ich dir über BufferedImage zu gehen, das würde so gehen:

Java:
File img = new File("C:\\..\\image.jpg");
BufferedImage bufferedImage = ImageIO.read(img);
ImageIcon imageIcon = new ImageIcon(bufferedImage);

Für Beispielcode zum skalieren einfach "BufferedImage scale picture" bei Google einegeben 🙂
 
Möchte es so einfügen aber da kommt ne Fehlermeldung
Java:
ImageIcon image = new ImageIcon("C:\Users\User\Pictures\Prüfung Bilder");
    JLabel imagelabel = new JLabel(image );
    label_bild_1.setBounds(20,128,147,41);
    label_bild_1.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_bild_1);
    setVisible(true);
 
Moin,
habe mir den unformatierten Code nicht angeschaut (möchte ja keinen Augenkrebs bekommen) 😉

Dann muss dein rButton1 selektiert sein, sonst würde er ja nicht in die if gehen
Ich habe ihn doch ausgwählt durch "if rbutton1.isSelected()
mit der Abfrage "isSelected" selektierst Du ihn nicht, sondern fragst, ob er selektiert ist!!
Wenn Dui ihn im Code selektieren willst, wäre ein "setSelected" Dein Freund 🙂

VG Klaus
 
Ja es tut mir leid, bin Anfänger bei Java, deshalb noch nicht so der Profi. Bin euch sehr Dankbar für eure Hilfe.
Bräuchte eure Hilfe noch beim Bild einfügen. Das will irgendwie nicht so ganz 🙁
 
Also ich habe einen Code ausprobiert, jedoch erscheint das Bild nicht in dem gewünschten JLabel.
Hier ist mein Code:
Java:
 ImageIcon image = new ImageIcon("C:/Users/User/Pictures/Prüfung Bilder");
    JLabel imagelabel = new JLabel(image );
    label_bild_1.setBounds(20,128,147,41);
    label_bild_1.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_bild_1);
    setVisible(true);

Ich vermute das der Pad zum Bild möglicherweise falsch ist, finde jedoch keinen anderen.
Ist es möglich vlt auch eine Internetadresse zu einem Bild einzugfügen ?
 
Das ist die Fehlermedlun

Ein ImageIcon ist ein bestimmtes Bild und kommt mit einem Ordner nicht klar.
Versuche es für den Anfang mit einem Absoluten Pfad zu einer DATEI nicht zu einem Ordner.

Java:
ImageIcon icon;
//Irgendwas was du noch so an Objekten brauchst

//Wichtig der Pfad wird entweder mit '/' gekentzeichnet - meist bei Unix üblich oder bei Windows mit '\\'.
//Sonst denkt Java das du mit "\neu" den ASCII Code für Enter benutzen magst und eu eine Zeiletiefer schreiben willst.
//Aber das muss dich noch nicht intressieren ;)
icon = new ImageIcon("C:\\user\\MyUser\\Documents\\workspace\\resources\\myBeautifulPicture.jpg);
 
Java:
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MyTest
{
    public static void main(String[] args) throws MalformedURLException
    {
        JFrame frame = new JFrame("MyPic");
       
        URL url = new URL("https://www.heise.de/foto/imgs/13/2/1/4/7/4/6/8/bilder-der-woche-8-schwarzer-kater_16-9-85134cff9113b018.jpeg");
        ImageIcon icon = new ImageIcon(url);
        JLabel picLabel = new JLabel(icon);
       
        frame.add(picLabel);
        frame.pack();
        frame.setVisible(true);
    }
}

Kopier das mal in eine Datei mit dem Name MyTest.java und kompiliere es
 
Ja das hat funktioniert, jedoch möchte ich das Bild nicht in einem Frame zeigen sondern in einem Label neben den Buttons. In diese Labels sollen die Bilder rein:
Java:
label_bild_1.setTest("Strandbild")
    label_bild_1.setBounds(20,128,147,41);
    label_bild_1.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_bild_1);
    setVisible(true);
   
    label_bild_2.setText("Abenteuerbild");
    label_bild_2.setBounds(20,184,163,41);
    label_bild_2.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_bild_2);
    setVisible(true);
   
    label_bild_3.setText("Naturbild");
    label_bild_3.setBounds(20,240,171,41);
    label_bild_3.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_bild_3);
    setVisible(true);

und so sieht dann die Ausgabe aus. Neben den Button jeweils das passende Bild in einem JLabel.
Hättets du mir da auch einen Tipp
 
Ich habe doch ein Label mit Bild erzeugt und es dem Frame zugewiesen.
Du kannst dasselbe machen mit deinem
label_bild1,label_Bild, label_Bild3
 
Dies ist die Frame mit der Bild-Frage:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Frame4 extends JFrame {
  private JLabel label_frage_3 = new JLabel();
  private JLabel label_frage = new JLabel();
  private JLabel label_bild_1 = new JLabel();
  private JLabel label_bild_2 = new JLabel();
  private JLabel label_bild_3 = new JLabel();
  private JButton jButton1 = new JButton();
  private JRadioButton rbutton1 = new JRadioButton();
  private JRadioButton rbutton2 = new JRadioButton();
  private JRadioButton rbutton3 = new JRadioButton();
  private ButtonGroup jButtonGroup1 = new ButtonGroup();


 
  public Frame4() {
   
    int frameWidth = 462;
    int frameHeight = 462;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
   
    //Anfang Komponenten
   
    getContentPane().add(new JLabel());
    label_frage_3.setText("Frage 3");
    label_frage_3.setBounds(40, 24, 355, 41);
    label_frage_3.setOpaque(true);
    label_frage_3.setHorizontalAlignment(SwingConstants.CENTER);
    cp.add(label_frage_3);
    setVisible(true);
   
    label_frage.setText("Wählen ein Bild");
    label_frage.setBounds(8, 48, 243, 49);
    label_frage.setOpaque(true);
    label_frage.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_frage);
    setVisible(true);

    ImageIcon icon;


    label__bild_1.setIcon(icon);
    label_bild_1.setBounds(20,128,147,41);
    label_bild_1.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_bild_1);
    setVisible(true);
   
    label_bild_2.setText("Abenteuerbild");
    label_bild_2.setBounds(20,184,163,41);
    label_bild_2.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_bild_2);
    setVisible(true);
   
    label_bild_3.setText("Naturbild");
    label_bild_3.setBounds(20,240,171,41);
    label_bild_3.setHorizontalAlignment(SwingConstants.LEFT);
    cp.add(label_bild_3);
    setVisible(true);


    rbutton1.setBounds(8, 128, 147, 41);
    jButtonGroup1.add(rbutton1);
    cp.add(rbutton1);

    rbutton2.setBounds(8, 184, 163, 41);
    jButtonGroup1.add(rbutton2);
    cp.add(rbutton2);

    rbutton3.setBounds(8, 240, 171, 41);
    jButtonGroup1.add(rbutton3);
    cp.add(rbutton3);


    jButton1.setBounds(144, 320, 193, 49);
    jButton1.setText("Nächste Frage");
    jButton1.setMargin(new Insets(2, 2, 2, 2));
    jButton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                System.out.println("Frame4--> Frame4()--> new ActionListener--> Button1 pressed");
                bt_1_ActionPerformed(evt);
                jButton1_ActionPerformed(evt);
            }
        });
    cp.add(jButton1);

    //Ende Komponeten
    setVisible(true);
   
  }
  int punkte;
  //Anfnag Methode
 
   public String getSelectedRadioButton(ButtonGroup bg) {
    for (java.util.Enumeration<AbstractButton> e = bg.getElements(); e.hasMoreElements();) {
      AbstractButton b = e.nextElement();
      if (b.isSelected()) return b.getText();
    }
    return null;
  }

  public void bt_1_ActionPerformed(ActionEvent evt) {
    if (rbutton1.isSelected()) {

      punkte =  punkte +0;


    } // end of if
    else if (rbutton2.isSelected()) {

      punkte = punkte +1;

    } // end of if
    else {

      punkte = punkte +2;

    } // end of if-else

  }


  public void jButton1_ActionPerformed(ActionEvent evt) {

    //Vor öffnen des nächsten Frame, übertragen der Punkte
    //Methode der Klasse Test aufrufen
    Test.setpunkte(punkte);

    System.out.println(Test.getpunkte());
    Frame5 f5 = new Frame5();

    f5.setVisible(true);

    dispose();


  } // end of jButton1_ActionPerformed

  // Ende Methoden

}

Muss dann das ganze Zeug hier rein ? Oder in ein neue Classe ?
Vielen Dank schon mal für eure Hilfe
 
Muss dann das ganze Zeug hier rein ?
Ja. Bzw. es "muss" gar nix. Es ist aber eine naheliegende Möglichkeit.
Du weisst wie man ein ImageIcon instanziiert ( mit einem Dateinamen oder mit URL zu einer Datei), und du weisst, wie man einem JLabel ein Icon zuordnet. Zur Info: Du kannst einem JRadioButton auch direkt einen Text und ein Icon zuordnen.
Wo liegt genau das Problem?
 
Ich habe noch nie ein Bild in ein JLabel oder ein JRadioButton eingefügt, deshalb weiß ich leider nicht wie ich einen ImageIcon instanziiert und wie ich es dann einem JRadioButton zuordne. Als erstes müssen alle Befehle bezüglich des Bild einfügens in die Klasse mit den JRadioButton, wo ich sie zuordnen möchte ? Und wenn so welche Befehle muss ich genau verwenden und wo müssen sie hin ?
 
Und ich hab nochmal eine Frage. Soory das ich euch so belästige. Ich habe nun wie in den vorigen Beitage nun einen Punktestand nach dem Beantworten der Fragen. Nun sollen je nach Punktestand unterschiedliche Antworten in jeweils einer Frame erscheinen. Jedoch kommt bei mir immer nur der erste Antwort (heißt die Frame12). Woran liegt das ? Hier ist meine erst Frame mit den Methoden
Java:
//Globale Variable
  static int punkte = 0;
 
  // Anfang Methoden
 
  public static int getpunkte() {
    return punkte;
 
  }
 
  // Als Static deklariern. Die methode ist so nicht an ein Objekt gebunden, sondern an die Klasse "Test"
  public static void setpunkte(int punketausframe) {
 
    punkte = punkte + punketausframe;
 
 
  }
 
 
  public void button_los_ActionPerformed(ActionEvent evt) {
    Frame2 f2 = new Frame2();
 
    f2.setVisible(true);
 
    dispose();
 
  }
 
 
 
 
 
  // Ende Methoden
 
  public static void main(String[] args) {
    new Test("Test");
 
 
  }
}

Und hier ist die Frame mit dem Button "Auswertung", und beim betätigen dieses Button soll er aktuelle Punktestand genommen werden und in die if gehen.

Java:
jButton1.setBounds(144, 320, 193, 49);
    jButton1.setText("Auswertung");
    jButton1.setMargin(new Insets(2, 2, 2, 2));
    jButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton1_ActionPerformed(evt);
      }
    });
    cp.add(jButton1);


    //Ende Komponeten
    setVisible(true);
 
  }
  int punkte;
  //Anfnag Methode


  public void jButton1_ActionPerformed(ActionEvent evt) {


    Test.getpunkte();
    if (punkte >= 7 ) {

    Frame12 f12 = new Frame12();

    f12.setVisible(true);

    dispose();
    }
    else if (7 < punkte > 12){

    Frame13 f13 = new Frame13();

    f13.setVisible(true);
 
    dispose();

    }
    else{

    Frame14 f14 = new Frame14();
 
    f14.setVisible(true);
 
    dispose();


    }



  } // end of jButton1_ActionPerformed

  // Ende Methoden
}
 
deshalb weiß ich leider nicht wie ich einen ImageIcon instanziiert
s. Beitrag von @Meeresgott. Mehr ist dazu nicht zu sagen, es sei denn, wir fangen gaaaaanz am Anfang an (was ist eine Datei? Was ist ein Verzeichnis? usw.).
und wie ich es dann einem JRadioButton zuordne
Z. B.
Java:
rbutton1.setIcon(variablennameDeinesImageIcons);
Ist dir der Begriff API Documentation geläufig?
Jedoch kommt bei mir immer nur der erste Antwort (heißt die Frame12). Woran liegt das
Das liegt wahrscheinlich daran, das punkte >= 7 ist. Warum das so ist, kann niemand hier im Forum wissen. Zwei Auffälligkeiten sind im Code (Methode jButton1_ActionPerformed) aber zu erkennen:
1. Du rufst einfach Test.getPunkte() auf, machst mit dem Rückgabewert aber gar nix. Dann fragst du den Wert von punkte ab. Ob Test.getPunkte() == punkte ist oder sein soll, kann man nur raten, weil nicht klar ist, aus welcher Klasse dein Codeausschnitt kommt.
2. else if (7 < punkte > 12) ist nicht kompilierbar. Der Ausdruck "7 < punkte" liefert einen boolean, und der kann nicht mit dem int Wert "12" verglichen werden.
 

Neue Themen


Zurück
Oben