在没有用户输入的情况下阻止Java Swing执行

时间:2015-05-06 16:08:38

标签: java swing actionlistener

我在Java上创建了通用战舰游戏,并在下面包含了一段代码。我获得的用户输入与使用控制台的方式相同,因为在GUI上我有一个JLabel充当print语句,JTextField接受用户输入,然后JButton“提交”输入。

问题是因为我创建程序首先在没有GUI的情况下工作,现在正在将程序转换为程序,我认为动作监听器正在逃避它的自我。我已经在用户输入船舶位置的地方启动了代码片段,他们已经选择了他们想要的每种类型船舶的数量。在这一点上,虽然我希望用户输入例如1(选择水平)然后A4以A4开始船,此后程序将保持循环直到所需数量的船已经放置。

然而,该程序反而跳过,从不提示用户输入方向并将标签更改为“输入猜测”(下一个在CPU上拍摄的方法)并且控制台打印 “你想要船Sub水平还是垂直? 对于水平输入数字1 或者对于垂直输入数字2: CPU镜头为:42 CPU射击的结果是:小姐 输入猜测“ 基本上跳过用户关于放置或方向的任何输入,正如我所说,我认为这可能是由于动作监听器,虽然我不确定,理想情况下程序会运行并且一旦到达任何label1.getText();程序将“暂停”直到用户输入文本然后按下提交按钮然后继续运行。

所以我的问题是有没有办法在不更改整个程序的情况下将“break”或“pause”插入代码中?

for (int i = 0; i < ship.size(); i++)
        {
            final int shipNumber = i;
                while (!worked)
                {
                    playerLocationToSet.clear();
                    worked = true;
                    label1.setText("Would you like the ship " + ship.get(shipNumber).getName() + " horizontal(enter 1) or vertical(enter 2) ?");
                    System.out.println("Would you like the ship " + ship.get(shipNumber).getName() + " horizontal or vertical ?");
                    System.out.println("For horizontal enter number 1");
                    System.out.println("Or for vertical enter number 2: ");
                    button1.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent f){
                            int addLetter;
                            int addNumber;
                        String orientString = textField1.getText();
                          int orient = Integer.parseInt(orientString);
                          // horizontal
                    if (orient == 1)
                    {
                        addLetter = 0;
                        addNumber = 1;
                    }
                    // vertical
                    else if (orient == 2)
                    {
                        addLetter = 1;
                        addNumber = 0;
                    }
                            int letterNumber = 0;
                            label1.setText("Where would you like to start " +  ship.get(shipNumber).getName() + "?");
                            String start = textField1.getText();
                            start = start.toUpperCase();
                            int letter = start.charAt(0);
                            int number = start.charAt(1) - 48;
                            for (int x = 0; x < alphabet.length; x++)
                            {
                                if(alphabet[x] == letter)
                                    {   
                                        letterNumber = x + 1;
                                    }
                            }
                            for (int j = 0; j <ship.get(shipNumber).getSize(); j++)
                            {
                                String position = "" + letterNumber + number;
                                playerLocationToSet.add(position);
                                letterNumber = letterNumber + addLetter;
                                number = number + addNumber;
                                for (int t = 0; t < ship.size(); t++)                       }
                    });
                    ship.get(i).setLocation(playerLocationToSet);
                }
        }
    }

    private void playerShoot()
    {
        String guess;
        String result;
        char[] alphabet = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
        char letter;
        int number;
        int guessLetter = 0;
        String finalGuess;
        while (!CPUship.isEmpty())
        {
            result = "miss";
            label1.setText("Enter a guess");
            System.out.println("Enter a guess");
            guess = textField1.getText();
            guess = guess.toUpperCase();
            letter = guess.charAt(0);
            number = guess.charAt(1) - 48;

对于我想尝试的这么长的问题抱歉,尽可能清楚。随意问任何问题,无疑我错过了什么。 提前致谢

1 个答案:

答案 0 :(得分:3)

  

有没有办法插入这个&#34; break&#39;或者&#34;暂停&#34;

没有查看代码或代码结构,但一般情况下,您会使用JOptionPane来提示用户输入。这将创建一个模态JDialog,它将停止处理,直到对话框关闭。

阅读How to Make Dialogs上Swing教程中的部分,了解更多信息和示例。