Java中的ActionEvent移动多个按钮

时间:2011-06-21 00:48:36

标签: java swing action

好的,所以我通过创建一个java应用程序来完成一个速成课程,并且遇到执行操作的问题。该程序是15拼图,游戏中你一次滑动一件并尝试按顺序获取所有数字,所以我允许一个“自动”模式选项,一旦点击就会解决用户的电路板。因此,我的代码从文本文件中读取解决方案,该文件正常工作,当我单击自动按钮时,没有任何“正方形”(JButtons)移动。因此,我不确定我是否完全不了解行动甚至是完整的过程。继承我的代码,如果有必要,我可以提供更多代码。

if (e.getSource() == ctrButtons[0]) {
      System.out.println("Auto Mode started\n");
      Scanner s = null;

      try {
        s = new Scanner(new BufferedReader(new FileReader("move_list.txt")));
        int count = 0;
        while (s.hasNext()) {
          //Cycle through to move in move_list
          if (count != 18) {
            s.next();
            count+=1;
          }
          else {
            int cur_move = Integer.parseInt(s.next());
            count = 0;
            /*Use cur_move to move blank space accordingly
             *UP------------3
             *LEFT----------2
             *RIGHT---------1
             *DOWN----------0
            */
            int zero_index = -1;
            for (int j=0; j<jbnButtons.length; j++) {
              if (Integer.parseInt(jbnButtons[j].getText()) == 0) {
                zero_index = j;
                break;
              }
            }

            Point zero = jbnButtons[zero_index].getLocation();

            //Check if move is up
            if (cur_move == 3) {
              Point next = jbnButtons[zero_index-4].getLocation();
              jbnButtons[zero_index].setLocation(next);
              jbnButtons[zero_index-4].setLocation(zero);
            }
//Check if move is left
                else if (cur_move == 2) {
                  Point next = jbnButtons[zero_index-1].getLocation();
                  jbnButtons[zero_index].setLocation(next);
                  jbnButtons[zero_index-1].setLocation(zero);
                }

            //Check if move is right
            else if (cur_move == 1) {
              Point next = jbnButtons[zero_index+1].getLocation();
              jbnButtons[zero_index].setLocation(next);
              jbnButtons[zero_index+1].setLocation(zero);
            }

            //Check if move is down
            else {
              System.out.println("Current move = 0");
              Point next = jbnButtons[zero_index+4].getLocation();
              jbnButtons[zero_index].setLocation(next);
              jbnButtons[zero_index+4].setLocation(zero);
            }

          }
        }
      }

因此,当我单击“自动”按钮时,我的代码会执行,然后我将输出打印到屏幕上以查看它是否正在循环显示代码,只是没有按钮每次都在循环中移动。任何想法??

1 个答案:

答案 0 :(得分:1)

您的代码正在Event Dispatch Thread上执行。在代码完成执行之前,GUI无法重新绘制,因此您不会看到中间步骤只是每个组件的最终位置。

阅读Concurrency上Swing教程中的tje部分,以获得更完整的解释。

也许你应该使用Swing Timer(该教程也有一个关于此的部分)。每次定时器启动时,您都会执行下一步操作。