有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何制作小程序动画?

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

对于插入和删除,很容易:一旦用户单击“插入”或“删除”按钮,只需更新数组,然后调用repaint重新绘制数组
但是搜索是不同的,它是一个动画,一旦单击搜索按钮,我想从数组中的第一个元素开始,用强光检查该元素的值。我有下面的代码,但它只是在最后一步(当元素被找到时)高亮显示元素,它没有像我预期的那样高亮显示每个元素,我对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) 个答案

  1. # 1 楼答案

    因为线。sleep()导致EDT休眠,这意味着GUI在循环完成之前无法重新绘制自身。相反,您应该使用摆动计时器来安排动画

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