2016-04-26 18 views
2

我是編程初學者。我正在搞java swing,並試圖製作一個愚蠢的應用程序。這是我的代碼。它沒有顯示任何錯誤,但它不起作用。彈出對話框時,變量的值不會顯示在對話框中。我使用的邏輯是正確的,因爲當我在編譯器中運行沒有GUI的東西時,它完美地工作。如果有人能夠說出我在這裏做錯了什麼,那將會非常有幫助。如何在java swing中彈出對話框顯示變量的值

這是我的計算代碼。

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); 

     } 
    } 
} 

,這是我的主要方法

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

您不要在任何地方調用sumAppString()方法來計算sumAsString的值。 – Areca

+0

那麼我能做些什麼來解決它?我應該在哪裏調用該方法? –

+1

解決方案在hamena314的答案。 – Areca

回答

0

您需要使用您的方法swingAppLogic(String name)在按鈕的actionPerformed() - 方法:

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

的另一個問題是,你的總和每次跑步都會越來越大。您需要在每次啓動時將其重置爲0:

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

如果您瞭解了一些關於編碼標準的內容,它也會對您有所幫助。例如,類名應該以大寫字母開頭,以防止代碼中的混淆。當你有一小部分人時,命名爲JLabel label會令人難以置信的快速混淆。

hth!

PS:你的計算天才總和的邏輯似乎總是輸出相同的值150?

[編輯]:

您正在嘗試從用戶輸入文本字段獲得名稱。但是你在錯誤的時間這樣做,而文本字段仍然包含「輸入你的暱稱」。因此,而不是username.toCharArray()使用name.toCharArray()。變量username然後不再需要。

+0

謝謝!這似乎工作!但你能解釋一下我們在那裏做了什麼嗎?我們是否帶了一個全新的變量來接受用戶輸入? –

+0

我收到了。它是我在方法 –

+0

中傳遞的參數中的變量。這是正確的。你給你的方法的參數,所以它可以使用它,因此你已經命名爲'name'。這表明,你應該總是給參數,變量等正確和「說話」的名字,所以你可以稍後看到什麼變量/參數正在做什麼。例子:'JTextField textField'的一個更好的名字可能是'nicknameTextField',所以現在你知道後面的源代碼。 – hamena314

相關問題