Java GUI等待键盘“回车”并继续显示

Java GUI等待键盘“回车”并继续显示,java,swing,events,user-interface,Java,Swing,Events,User Interface,我有一个JAVA纸牌游戏,每轮显示四张牌 当前,每轮之间的停止等待控制台中的\n输入。但是我想把它改为等待GUI上的键盘输入 以下是我目前的代码。请让我知道我应该如何更改它 万分感谢 import java.awt.GridLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import java.util.ArrayList; im

我有一个JAVA纸牌游戏,每轮显示四张牌

当前,每轮之间的停止等待控制台中的\n输入。但是我想把它改为等待GUI上的键盘输入

以下是我目前的代码。请让我知道我应该如何更改它

万分感谢

import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;



public class Game {

    public static void main(String args[]) throws IOException {

        Deck deck = new Deck();
        deck.shuffle();
        int aGame = 4;

        List<Card> cards = new ArrayList<Card> ();

        for(int i = 0; i < 52; i++) {
            cards.add(deck.deck.get(i));
            if(aGame == 1) {
                System.out.println(deck.deck.get(i).toString());
                System.out.println("Start!!!");

                JFrame f = new JFrame("Calculating 24!");
                GridLayout grid = new GridLayout(2, 2);
                f.setLayout(grid);

                f.addWindowListener(new WindowAdapter(){
                        public void windowClosing(WindowEvent e) {
                            System.exit(0);
                        }
                    });

                for(Card c: cards){
                    f.add(new LoadImageApp(c));
                }
                f.pack();
                f.setVisible(true);
                cards.clear();

                while (true) {
                    char c = (char) System.in.read();
                    if (c == '\n') {

                        f.setVisible(false);
                        break;
                    }
                }

                aGame = 4;
                if(i == 51) {
                    deck.shuffle();
                    i = -1;
                }
            }
            else if(aGame == 4) {
                System.out.println("Calculate based on the following four cards!");
                System.out.println(deck.deck.get(i).toString());
                aGame --;
            }
            else {
                System.out.println(deck.deck.get(i).toString());
                aGame --;
            }
        }
    }



}

对于基于Swing的应用程序,应使用处理关键事件。但是,最终用户可能不清楚是否需要输入。一种更以用户界面为中心的方法是为此目的使用对话框

JOptionPane.showMessageDialog(frame, "Press ENTER to continue");

使用基于控制台的读取方法(如InputStreamread)是用户感到困惑的另一个原因。使用JTextComponent(如JTextField)读取Swing应用程序中的用户输入。

对于基于Swing的应用程序,应使用处理关键事件。但是,最终用户可能不清楚是否需要输入。一种更以用户界面为中心的方法是为此目的使用对话框

JOptionPane.showMessageDialog(frame, "Press ENTER to continue");

使用基于控制台的读取方法(如InputStreamread)是用户感到困惑的另一个原因。使用JTextField等JTextComponent来读取Swing应用程序中的用户输入。

如果接受值的GUI元素是JTextField,则可以添加一个ActionListener,通常在用户点击Enter时响应

其他提示 1. 改为:

f.setDefaultCloseOperaiton(JFrame.EXIT_ON_CLOSE);
或者更好

f.setDefaultCloseOperaiton(JFrame.DISPOSE_ON_CLOSE);
第一个线程将具有与以前相同的效果,但第二个线程还将检查在退出之前是否没有运行非守护进程线程

2.
不要试图将GUI和命令行混合在一起。为这两者编写应用程序的方式都有很大不同。

如果接受值的GUI元素是JTextField,则可以添加一个ActionListener,它通常会在用户点击Enter时响应

其他提示 1. 改为:

f.setDefaultCloseOperaiton(JFrame.EXIT_ON_CLOSE);
或者更好

f.setDefaultCloseOperaiton(JFrame.DISPOSE_ON_CLOSE);
第一个线程将具有与以前相同的效果,但第二个线程还将检查在退出之前是否没有运行非守护进程线程

2.
不要试图将GUI和命令行混合在一起。您为这两种应用程序编写应用程序的方式有很大不同。

您可以使用KeyCodes.KEY\u ENTER如果它是基于java的桌面应用程序,您可以实现KeyListener您能告诉我如何实现KeyListener吗?谢谢@Manish noooo-在Swing中,我们不使用键盘监听器,而是使用keyBindings@SanyamGoel查看我对Manish的评论您可以使用KeyCodes.KEY\u ENTER如果它是基于java的桌面应用程序,您可以实现KeyListener您能告诉我如何实现KeyListener吗?谢谢@Manish noooo-在Swing中,我们不使用键盘监听器,而是使用keyBindings@SanyamGoel见我对曼尼什的评论