2016-04-26 2 views
2

Ich bin ein Anfänger in der Programmierung. Ich habe mit Java Swing herumgespielt und versucht, eine dumme App zu machen. Das ist mein Code. Es zeigt keine Fehler, aber es funktioniert nicht. Wenn das Dialogfeld angezeigt wird, wird der Wert der Variablen im Dialogfeld nicht angezeigt. Die Logik, die ich verwendet habe, ist richtig, denn wenn ich es im Compiler ohne die GUI-Sachen ausführe, funktioniert es perfekt. Wenn irgendwer sagen könnte, was ich hier falsch mache, wäre es sehr hilfreich.wie man den Wert der Variablen im Popup-Dialog mit Java Swing zeigt

Dies ist mein Code für die Berechnungen.

import java.awt.FlowLayout; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JTextField; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JButton; 
import javax.swing.JOptionPane; 

public class swingApp extends JFrame{ 
    JLabel label; 
    JButton button; 
    public JLabel label2; 
    JTextField textField = new JTextField("enter you nicknamae"); 
    String username=textField.getText(); 
    public int geniusMeter; 
    public int sum=0; 
    public String sumAsString; 
    public void swingAppLogic(String name){ 
     char[] letters = username.toCharArray(); 
     char [] alphabet={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 
     int [] measure={7,3,1,13,8,26,15,18,2,5,22,20,16,9,5,11,23,12,25,6,4,21,24,14,17,10}; 

     for(int count=0;count<letters.length;count++){ 
      for (int count1=0;count1<alphabet.length;count1++){ 
       if (letters[count]==alphabet[count1]){ 
        geniusMeter=measure[count1]; 
        sum=sum+geniusMeter; 
        break; 
       } 
      } 
     } 
     sumAsString = Integer.toString(sum); 

    } 

    public swingApp(){ 
     super("Genius Calculator"); 
     setLayout(new FlowLayout()); 
     label = new JLabel("Wanna know how genius you are?"); 
     label2 = new JLabel(" "); 
     button = new JButton("press enter and then click me to know the results"); 
     handlerClass handler = new handlerClass(); 
     button.addActionListener(handler); 
     add(label); 
     add(label2); 
     add(button); 
     add(textField); 
    } 
    public class handlerClass implements ActionListener{ 
     public void actionPerformed(ActionEvent event){ 
      JOptionPane.showMessageDialog (null, sumAsString, "Title", JOptionPane.INFORMATION_MESSAGE); 

     } 
    } 
} 

und das ist meine Hauptmethode

import javax.swing.JFrame; 

public class swingAppTester{ 
    public static void main (String [] args){ 
     swingApp object=new swingApp(); 

     object.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     object.setSize(500,400); 
     object.setVisible(true); 
    } 
} 
+1

Sie rufen die swingAppLogic() -Methode nicht überall auf, die den Wert von sumAsString berechnet. – Areca

+0

also was kann ich tun, um es zu beheben? Wo soll ich die methode anrufen? –

+1

Die Lösung ist in hamena314's Antwort. – Areca

Antwort

0

Sie benötigen eine Methode swingAppLogic(String name) in dem actionPerformed() -Methode der Taste verwenden:

public class handlerClass implements ActionListener{ 
    public void actionPerformed(ActionEvent event){ 
     swingAppLogic(textField.getText()); 
     JOptionPane.showMessageDialog (null, sumAsString, "Title", JOptionPane.INFORMATION_MESSAGE); 
    } 
} 

Ein weiteres Problem ist, dass Ihre Summe wird mit jedem Lauf größer. Sie müssen es 0 bei jedem Start zurück:

public void swingAppLogic(String name){ 
    sum = 0; 
    char[] letters = username.toCharArray(); 

Es wäre auch hilfreich sein für Sie, wenn Sie ein wenig über Coding-Standards zu lernen. Zum Beispiel sollten Klassennamen mit einem Großbuchstaben beginnen, um Verwirrung im Code zu vermeiden. Und die Benennung eines wird unglaublich schnell verwirrend, wenn Sie mehr als eine Handvoll haben.

hth!

PS: Ihre Logik zur Berechnung der Geniesumme scheint immer den gleichen Wert von 150 auszugeben?

[EDIT]:

Sie versuchen, den Namen aus dem Textfeld zu erhalten, die der Benutzer eingegeben hat. Aber Sie tun dies zur falschen Zeit, während das Textfeld immer noch "gib deinen Nickname" enthält. Verwenden Sie also username.toCharArray()name.toCharArray(). Die Variable username wird dann nicht mehr benötigt.

+0

danke, das schien zu funktionieren, aber kannst du bitte etwas erklären, was wir dort gemacht haben? Haben wir eine ganz neue Variable für die Benutzereingabe mitgebracht? –

+0

Ich habe it.it ist die Variable in dem Parameter ich in der Methode übergeben –

+0

Das ist richtig. Sie geben Ihrer Methode den Parameter, damit sie damit arbeiten kann, daher haben Sie sie bereits 'name' genannt. Dies zeigt, dass Sie Parameter, Variablen usw. immer korrekt angeben und Namen "sprechen" sollten, damit Sie später sehen können, welche Variable/welcher Parameter was macht. Beispiel: Ein besserer Name für 'JTextField textField' könnte' nicknameTextField' sein, so dass Sie jetzt wissen, was drin ist, wenn Sie den Quellcode später lesen. – hamena314

Verwandte Themen