Ich habe ein Problem in Java mit der GUI. Ich habe den Zählerwert im Mausklickereignis einer Schaltfläche verwendet, damit sich der Zählerwert jedes Mal ändern kann, wenn wir auf die Schaltfläche klicken.

Das Problem ist jedoch, dass es nicht funktioniert. Dies bedeutet, dass sich der Zählerwert nicht ändert, wenn wir auf die Schaltfläche klicken. Ich habe auch das Ereignis Schaltfläche Aktion ausgeführt verwendet, aber der Zählerwert ändert sich immer noch nicht ...

Bitte jemand hilft mir, ich wäre dankbar ... Hier ist der Code. Hör zu . . .

private void jButton4MouseClicked(java.awt.event.MouseEvent evt) {                                      

    int count=0;
    if(count<questions1.length)
    {
           System.out.println(count);

           jLabel4.setText(questions1[count]);
           jLabel5.setText(answers1[count]);
    }      
    count++;
}                                     
0
user5725571 29 Dez. 2015 im 17:48

2 Antworten

Beste Antwort

Empfohlene Lösung:

Die primäre Lösung ist, wie @CubeJockey in den OP-Kommentaren angegeben hat, und ab @ AlexandrRadchykovs Antwort: Haben Sie die count Variable in einem höheren Bereich (wahrscheinlich als klassenweite Variable).


Eine alternative Lösung:

Abhängig von Ihrem Anwendungsfall gibt es eine zweite Lösung, die darin besteht, die Variable int überhaupt nicht zu haben und aus einem vorherigen Status zu analysieren.

Beachten Sie jedoch, dass dies weniger CPU-effizient (und in Bezug auf den Speicher unwesentlich besser) ist als die primäre Methode und nur für Methoden / Ereignisse mit geringem Datenverkehr geeignet ist (was für das OP der Fall zu sein scheint). Dies hängt auch vom Textformat des JLabel (oder der Komponente, in die Sie ausgeben) ab.

Bedenken Sie, dass der Text von JLabel der Zähler selbst ist:

private void jButtonCounterMouseClicked(java.awt.event.MouseEvent evt) {
  int count = Integer.parseInt(jLabelCounter.getText());
  count += 1;
  jLabelCounter.setText(count);
  //Condensed: jLabelCounter.setText(Integer.parseInt(jLabelCounter.getText()) + 1);
}

Wenn das Format des Inhalts des Arrays questions1[index] einen Index enthält, kann dieselbe Parse-from-Text -Technik angewendet werden. Stellen Sie sich eine questions[] -Syntax von "1. How are you?" vor, wobei der Index am Anfang vom Rest des Textes basierend auf ".", ":" oder ")" (Regex) getrennt wird : "\\.|\\:|\\)"):

private void jButtonCounterMouseClicked(java.awt.event.MouseEvent evt) {
  int index = Integer.parseInt(jLabel4.getText().split("\\.|\\:|\\)", 2)[0]);
  if (index < questions1.length) {
    jLabel4.setText(questions1[index]);
  }
  if (index < answers1.length) {
    jLabel5.setText(answers1[index]);
  }
}

Einige Randnotizen zum Code:

Wenn Ihr answers1 -Array immer dem questions1 -Array entspricht, ist es möglicherweise besser, answers zu ihrem Array zu wechseln jeweilige questions:

//Creating map (Note: Since order is important, use a "Linked" map)
Map<String, String> questionsMap = new LinkedHashMap();

//Storing Q&As:
questionsMap.put("Question 1", "Answer 1");
questionsMap.put("Question 2", "Answer 2");
questionsMap.put("Question 3", "Answer 3");

//Getting individual As from Qs (Qs as Object):
questionsMap.get(questionObject);

//=====This might be as follows in your code specifically:
questionsMap.get(jLabel4.getText());

//Getting individual Qs (from index):
questionsMap.keySet().toArray()[index];

//Getting individual As (from index):
questionsMap.values().toArray()[index];

//Getting individual Key-Value pairs (Q-A pairs):
Entry<String, String> entry = (Entry)questionsMap.entrySet().toArray()[index];
entry.getKey(); //Question
entry.getValue(); //Answer

//Iterating through all Key-Value pairs:
for (Entry<String, String> currentEntry : questionsMap.entrySet()){
  currentEntry.getKey(); //Question
  currentEntry.getValue(); //Answer
}
2
Community 23 Mai 2017 im 12:31

Sie sollten die Variable count in einen größeren Bereich verschieben. Sie können es als Klasseninstanzvariable deklarieren.

2
Alexandr Radchykov 29 Dez. 2015 im 14:50