2015-11-29 24 views
0

我已經創建了一個GUI,每次按下某個鍵時都會打印出一個列表。或者我認爲......但不是運行我在按鍵上所做的功能,而是一直使用GUI。如何阻止我的GUI無限期地打印文本? - Java

這裏是我的代碼:

package main; 

import java.util.ArrayList; 
import javax.swing.*; 
import java.awt.*; 

public class Elements{ 
    static ArrayList<String> composition = new ArrayList<String>(); 
    static Boolean x = true; 
    static JLabel gLabel = GUI(); 
    public static void main(String[] args){ 
     while(x == true){ 
      gLabel.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("Q"), "water"); 
      gLabel.getActionMap().put("water", water()); 
      gLabel.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("W"), "life"); 
      gLabel.getActionMap().put("life", life()); 
     } 
    } 
    public static Action water(){ 
     if(composition.contains("Fire")){ 
      composition.remove("Fire"); 
      composition.add("Steam"); 
     } else if(composition.contains("Cold")){ 
      composition.remove("Cold"); 
      composition.add("Ice"); 
     } else if(composition.contains("Arcane")){ 
      composition.remove("Arcane"); 
      composition.add("Poison"); 
     } else if(composition.contains("Lightning")){ 
      composition.remove("Lightning"); 
     } else { 
      composition.add("Water"); 
     } 
     int y = 0; 
     while(y < 100){ 
      System.out.println(""); 
      y++; 
     } 
     System.out.println(composition); 
     x = true; 
     return null; 
    } 
    public static Action life(){ 
     if(composition.contains("Arcane")){ 
      composition.remove("Arcane"); 
     } else { 
      composition.add("Life"); 
     } 
     int y = 0; 
     while(y < 100){ 
      System.out.println(""); 
      y++; 
     } 
     System.out.println(composition); 
     x = true; 
     return null; 
    } 
    private static JLabel GUI(){ 
     JFrame frame = new JFrame("KeyPress Handler"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel label = new JLabel("This window listens for key presses and does stuff with them. Isn't that cool?"); 
     label.setPreferredSize(new Dimension(175, 100)); 
     frame.getContentPane().add(label, BorderLayout.CENTER); 

     frame.pack(); 
     frame.setVisible(true); 
     return label; 
    } 
} 

而不是在按鍵運行life()water()的,它運行他們所有的時間

我得到的輸出,

[Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life, Water, Life]

而不觸及什麼

我有不知道爲什麼發生這種情況,但我認爲它與做: gLabel.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("Q"), "water");

和:

gLabel.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("W"), "life");

如果有人能告訴我是什麼問題以及如何解決它,這將是偉大的。

謝謝, 海倫

PS:我加入2-新行: gLabel.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("Enter"), "stop"); gLabel.getActionMap().put("stop", stop());

功能stop()如下:

public static Action stop(){ x = false; return null;

據我所知,這意在添加stop()到的新密鑰綁定。

此外,進行這些更改後,輸出減少到[Water, Life]

(另外,固定while循環)

+0

對不起有些模糊。 – Helen

+0

'while(x = true)'應該是'while(x == true)',但這並不能解決問題。 –

+0

問題是,在你的代碼中沒有任何地方,'x'有可能被改爲'false' –

回答

0

while (x = true)必須改變,同時while (x == true)

,你就必須使人們有可能在你的代碼(無論走到哪裏,不是特別在主因爲x是一個靜態變量)的x值更改爲假。

這就是說,我不確定你想要達到什麼效果,我認爲你會走錯方向。

+0

它使一般的更好的代碼,但我仍然得到相同的輸出。雖然我同意,但我確信我的方向是錯誤的。 – Helen

0

while(x = true){ - >不知爲何,你必須設置X布爾變量錯誤在你,而條件。你的while循環中沒有別的東西。

相關問題