如何阻止我的GUI无限期地打印文本?-Java语言



我创建了一个GUI,每次按键都会打印出一个列表。或者我是这么想的。。。但是,GUI并没有在按键时运行我所做的功能,而是一直在运行。

这是我的代码:

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

如果有人能告诉我问题出在哪里以及如何解决,那就太好了。

谢谢,Helen

附言:我增加了两行: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()的新密钥绑定添加到Space

此外,在进行这些改变之后,输出减少到[Water, Life]

(此外,修复了while循环)

while ( x = true )必须更改为while ( x == true )

并且您必须在代码中(无论在哪里,尤其是在main中,因为x是一个静态变量)将x的值更改为false。

也就是说,我不确定你想要实现什么,我认为你走错了方向。

while(x = true){-->您必须在while条件中将x布尔变量设置为false。while循环中没有其他内容。

最新更新