2013-03-01 23 views
0

我一直在嘗試一段時間得到一個JButton我必須返回一個字符串,我有它在一定程度上工作,但它只適用於當我使用System.out.println()方法。從JButton press Action Listener返回一個字符串?

我的相關代碼:

private String answer; 

public void inputDataButton(JButton inButton) 
{ 
inButton.addActionListener(new Action1()); 
} 

public String returnAnswer() 
{ 
return answer; 
} 

private void fileAnswer(String inString) 
{ 
answer = new String(inString); 
} 

public class Action1 implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     String sub = JOptionPane.showInputDialog("Input The Date"); 
     fileAnswer(sub); 
    } 
} 

用我的主要控制它:

public class test 
{ 
    protected static JTextField text; 

    public static void main(String[] args) 
    { 
    javaUI base = new javaUI("Date Killer", 800, 800); 

    JLabel label = new JLabel("Place Holder"); 
    base.addLabel(label, 1, 0, false); 

    JButton button = new JButton("Press Here"); 
    base.addButton(button, 0, 0, false); 

    String str = "EMPTY"; 

    base.inputDataButton(button); 

    while (str == "EMPTY") 
     { 
     str = base.returnAnswer(); 
     } 

    System.out.println(str + " TEST"); 
    label.setText(str + "SETTED"); 
    } 
} 

JavaUI只是另一種類簡化了標籤,按鈕等,整個的JFrame和JPanel的設置

反正,繼承人我的問題。在主類中,在while語句中,如果我之前有一個System.out.println()語句,則str被成功設置爲字符串 這顯然使終端變得非常混亂,因爲它重複「空」100次直到按下按鈕。

但是,如果我刪除該語句,顯然沒有什麼是打印出來的,但是str永遠不會設置爲str。

我一直在這裏亂搞了很長一段時間(新的所有Java UI的東西,主要只是在計算部分的東西),我還沒有找到一個工作的解決方案,不做一個我的終端一團糟。感謝所有的幫助!

Cail

+0

什麼是使其工作的'System.out.println()'語句?而且,爲什麼'while.'循環中的'base.returnAnswer()'?每次調用它時是否返回不同的答案? – 2013-03-01 10:34:43

+0

由於我不知道按鈕將被按下的位置,因此我爲循環直到字符串不是「空」的字符串設置了一個while循環。但是,如果循環內部有一個System.out.println(str)語句,它只會退出循環,否則會變得無止境。 – 2013-03-01 10:38:59

回答

1

1)這是一個有點陌生,使用循環「等待」的動作發生。你可以看你的CPU使用情況,如果它永遠循環,它可能會死機。

2)此外,無論按鈕是否被點擊,該方法都會返回 - 在動作發生之前,該方法會根據您的代碼返回一個null字符串。在你的主要方法中,str == "EMPTY"在第一輪後很快就會變成錯誤的。然後你會在屏幕上看到「空測試」。


嘗試把代碼之後while循環到actionPerformed方法或fileAnswer方法和刪除循環:

public void actionPerformed(ActionEvent e) 
{ 
    String sub = JOptionPane.showInputDialog("Input The Date"); 
    System.out.println(sub + " TEST"); 
    label.setText(sub + "SETTED"); 
} 

另外,我不知道爲什麼你叫answer = new String(inString)。如果你想把它分配給另一個變量,你只需要調用answer = inString因爲字符串是不可修改的。在這種情況下,你不要這樣做。

+0

哎呀,對不起答案=新的字符串(inString)部分,在我最近的代碼中我改變了這一點。我可以這樣做,除了我真正想要做的是將其饋送給main並將輸入的字符串放入str中,因爲我打算將其用於進一步計算,標籤不是必需的,僅用於視覺方面完成的程序,我想要做的是獲得按鈕按下將輸入的字符串返回到主要的字符串str。感謝您的幫助!:) – 2013-03-01 11:59:29

+0

@CailDemetri不客氣。關鍵是按下按鈕後要做的任何計算,您應該在我所展示的'actionPerformed()'方法中調用它。我只是在你的問題中採用了這個例子。無論如何你需要改變設計。或者你能否展示原始要求,我可以幫助你制定一個更合適的方式來完成這項工作。 – shuangwhywhy 2013-03-01 14:05:25

+0

ahhh,我明白你的意思了,我可以嘗試爲計算創建一個靜態類。至於我想要做的是創建一種日曆程序,除了它的別人,所以我不能做任何通過命令提示符的輸入。所以我試圖讓用戶通過按下按鈕創建的輸入對話框輸入日期,即抓住輸入的字符串並對其執行計算。問題是我無法弄清楚如何將所述字符串返回到我的主要。我可能會嘗試與另一個班,但我寧願在主要做。感謝您澄清:D – 2013-03-02 03:54:15