Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何制作小程序动画?_Java_Animation_Applet - Fatal编程技术网

Java 如何制作小程序动画?

Java 如何制作小程序动画?,java,animation,applet,Java,Animation,Applet,我尝试为数组制作applet,包括插入/删除/搜索操作 对于插入和删除,很容易:一旦用户单击“插入”或“删除”按钮,只需更新数组,然后调用“重新绘制”重新绘制数组。 但是搜索是不同的,它是一个动画,一旦单击搜索按钮,我想从数组中的第一个元素开始,用强光检查该元素的值。我有下面的代码,但它只是在最后一步(当元素被找到时)高亮显示元素,它没有像我预期的那样高亮显示每个元素,我对applet动画不太熟悉,有人可以帮助吗?谢谢 // index for search. private searchInd

我尝试为数组制作applet,包括插入/删除/搜索操作

对于插入和删除,很容易:一旦用户单击“插入”或“删除”按钮,只需更新数组,然后调用“重新绘制”重新绘制数组。
但是搜索是不同的,它是一个动画,一旦单击搜索按钮,我想从数组中的第一个元素开始,用强光检查该元素的值。我有下面的代码,但它只是在最后一步(当元素被找到时)高亮显示元素,它没有像我预期的那样高亮显示每个元素,我对applet动画不太熟悉,有人可以帮助吗?谢谢

// index for search.
private searchIndex = -1;

 public boolean  search(int number) {
  boolean found = false;

  for (int i = 0; i < arr.getSize(); i++) {
   searchIndex = i;

   repaint();
   revalidate();

   if (arr.getElement(i) == number) {
    found = true;
    break;
   }

   try {
    Thread.sleep(3000);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }

  return found;
 }

    public void paintComponent(Graphics g) {

        super.paintComponent(g);       
        Graphics2D g2;
        g2 = (Graphics2D) g;
        g2.setRenderingHint(
                RenderingHints.KEY_ANTIALIASING, 
                RenderingHints.VALUE_ANTIALIAS_ON);

        int xPos = START_X, yPos = START_Y;
        int width = CELL_WIDTH, height = CELL_HEIGHT;

        Font font = new Font("Serif", Font.BOLD, 12);
        g2.setFont(font);

        // draw array
        for(int i = 0; i < arr.getSize(); i++) {
 int element = arr.getElement(i);

 g2.setColor(Color.BLUE);
 g2.drawString(Integer.toString(element), xPos + OFFSET - 5, yPos + OFFSET + 5);

 g2.setColor(Color.BLACK);
 g2.drawRect(xPos, yPos, width, height);

 xPos += width;   
        }

        // high light the cell
         if (searchIndex > -1) {  
  xPos = START_X + (runSearch * CELL_WIDTH);

  g2.setColor(Color.blue);
  g2.fillRect(xPos, yPos, width, height);

  g2.setColor(Color.white);
  g2.drawString(Integer.toString(arr.getElement(searchIndex)), xPos + OFFSET - 5, yPos + OFFSET + 5);
 }

    }
//用于搜索的索引。
私有搜索索引=-1;
公共布尔搜索(整数){
布尔值=false;
对于(int i=0;i-1){
xPos=开始X+(运行搜索*单元格宽度);
g2.setColor(颜色为蓝色);
g2.fillRect(xPos、YPO、宽度、高度);
g2.设置颜色(颜色为白色);
g2.drawString(Integer.toString(arr.getElement(searchIndex)),xPos+OFFSET-5,yPos+OFFSET+5;
}
}
因为Thread.sleep()导致EDT休眠,这意味着GUI在循环完成之前无法重新绘制自身。相反,您应该使用摆动计时器来安排动画

读这本书。从“并发性”(了解EDT如何工作)和“如何使用计时器”部分开始