Как добавить JProgressBar, который работает с таймером в моем коде? - PullRequest
0 голосов
/ 10 июня 2019

Я хочу добавить JProgressBar в мой код, который считается до 5 (в секундах). После этого он будет принимать новые значения, но моя текущая проблема заключается в том, что я не могу даже создать ProgressBar с моим ActionListener, поэтому я не повторяюсь. Может кто-нибудь показать мне, как добавить ProgressBar с таймером?

Я пытался добавить его в класс Haupt, но он не повторялся после нажатия кнопки перезапуска (Neustart), поэтому я пробовал много других вещей, но ничего не получалось.

/**
 * @author (Noah Steinle) 
 * @version (2.2.1)
 */

//Importe
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import javax.swing.JProgressBar;
import javax.swing.Timer;

//Klasse mit JFrame erweitert und hat einen ActionListener implementiert
public class Haupt extends JFrame implements ActionListener 
{
    private int x = (int) (Math.random() * 20 + 1);
    private int y = (int) (Math.random() * 20 + 1);
    private int z = x * y;  

    private JTextField benutzerWert;   

    private JLabel aufgabe;
    private JLabel eingabeTipp;    
    private JButton neustartButton;

    private static int richtig;
    private JLabel richtigLabel;

    private static int falsch;
    private JLabel falschLabel;

    private Timer timer;

    private JProgressBar progressBar;


    public Haupt() 
    {
        super("Multi-Game");

        //nutzt FlowLayout ein
        setLayout(new FlowLayout());

        //Label zur Anzeige des Aufgabeterms
        aufgabe = new JLabel(x + "\u2219" + y + "= ");  
        add(aufgabe);

        //Eingabefeld für Benutzer und wird gecheckt
        benutzerWert = new JTextField(5); 
        benutzerWert.addActionListener(this);
        add(benutzerWert);

        //gibt einen Tipp aus, wie der Wert im Vergleich zum Ergebnis ist
        eingabeTipp = new JLabel("");
        add(eingabeTipp); 

        //Neustart
        neustartButton = new JButton("Nächste Aufgabe");
        add(neustartButton);
        neustartButton.addActionListener(this);

        //Anzahl der Richtigen        
        richtig = 0;
        richtigLabel = new JLabel();
        richtigLabel.setText("Anzahl der Richtigen: " + richtig);
        add(richtigLabel);

        //Anzahl der Falschen
        falsch = 0;
        falschLabel = new JLabel();
        falschLabel.setText("Anzahl der Falschen: " + falsch);
        add(falschLabel);

        //ProgressBar erstellen
        progressBar =new JProgressBar(0,5); //min = 0 , max = 5
        add(progressBar);
    }  

    //Methode zum Generieren von Zufallswerten im Bereich von 1 bis 20
    private int zufallWert()
    {
        int x = (int) (Math.random() * 20 +1);
        return x;
    }




     public void actionPerformed(ActionEvent e) 
     {
           //Reaktion auf Benutzereingabe
           if(e.getSource()==benutzerWert) {

             int versuch;

             //String (benutzerWert) in Integer umwandeln + in Versuch einf.
             versuch = Integer.parseInt(benutzerWert.getText());


             if (versuch > z) 
             {
                  eingabeTipp.setText("Zu groß!");
                  SwingUtilities.updateComponentTreeUI(eingabeTipp);
                  getContentPane().setBackground(Color.RED);
                  eingabeTipp.setForeground(Color.BLACK);
                  aufgabe.setForeground(Color.BLACK);
                  falsch++;
                  falschLabel.setText("Falsche: " + falsch);
             }

             if (versuch < z) 
              {
                  eingabeTipp.setText("Zu klein!");
                  SwingUtilities.updateComponentTreeUI(eingabeTipp);
                  getContentPane().setBackground(Color.BLUE);
                  eingabeTipp.setForeground(Color.WHITE);
                  aufgabe.setForeground(Color.WHITE);
                  falsch++;
                  falschLabel.setText("Falsche: " + falsch);
              }             

             if (versuch == z) 
              {
                  eingabeTipp.setText("Richtig!!!");
                  //SwingUtilities.updateComponentTreeUI(eingabeTipp);
                  benutzerWert.setEditable(true);
                  getContentPane().setBackground(Color.GREEN);
                  eingabeTipp.setForeground(Color.BLACK);
                  aufgabe.setForeground(Color.BLACK);
                  richtig++;
                  richtigLabel.setText("Richtige : " + richtig);
                  x = zufallWert();
                  y =zufallWert();
                  z = x * y;
                  aufgabe.setText(x + "\u2219" + y);
                  getContentPane().setBackground(Color.WHITE);
                  eingabeTipp.setForeground(Color.BLACK);
                  aufgabe.setForeground(Color.BLACK);
                  benutzerWert.setText("");
                  eingabeTipp.setText("");
              }      
           }

           //Button setzt neue Werte
           else
           {
               x = zufallWert();
               y =zufallWert();
               z = x * y;
               aufgabe.setText(x + "\u2219" + y);
               getContentPane().setBackground(Color.WHITE);
               eingabeTipp.setForeground(Color.BLACK);
               aufgabe.setForeground(Color.BLACK);
               benutzerWert.setText("");
           }
     } 

    //Anzeigen des JFrames
    public static void main(String args[]) 
    {
        Haupt ausgabeFrame = new Haupt();
        ausgabeFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ausgabeFrame.setSize(550, 150);
        ausgabeFrame.setVisible(true);
    }
}

Если ответ правильный, следует добавить 1 к «Richtige», иначе к «Falsche», если таймер на 5, при попытке ответить на вопрос, он должен перейти к следующему вопросу (таким образом, новые значения).

1 Ответ

0 голосов
/ 10 июня 2019

Чтобы JProgressBar отображал что-либо, установите для него определенное значение при нажатии вашей кнопки:

if(e.getSource()==benutzerWert) { // below this line, add

  int anzahlAntworten = falsch + richtig;
  progressBar.setValue(anzahlAntworten);
  if (anzahlAntworten > 5) {
    // whatever should happen if the end of the progressBar is reached, maybe reset? or GameOver?
  } 
  // ...

}

Таймер может быть создан в вашем основном методе, поэтому он вызывает метод выполнения с фиксированным интервалом (например, раз в секунду). Смотрите пример по ссылке выше. Возможно, вы хотите изменить значение progressBar в вашем методе run.

...