我已經創建了一個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循環)
對不起有些模糊。 – Helen
'while(x = true)'應該是'while(x == true)',但這並不能解決問題。 –
問題是,在你的代碼中沒有任何地方,'x'有可能被改爲'false' –