Я пытаюсь сделать апплет для массива, включая операции вставки / удаления / поиска.
Для вставки и удаления это просто: как только пользователь нажмет кнопку «вставить» или «удалить», просто обновите массив и вызовите repaint, чтобы перерисовать массив.
Однако поиск отличается, это анимация, после нажатия кнопки поиска, я хочу начать с первого элемента в массиве, чтобы проверить значение, выделив этот элемент. У меня был код, показанный ниже, но он только подсвечивает элемент на последнем шаге (когда элемент найден), он не подсвечивает каждый элемент, как я ожидал, я не совсем знаком с анимацией апплета, любой может Помогите? Спасибо.
// 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);
}
}