Swing безоконный компонент?

Я хочу показать вращающееся колесо прогресса (например, это), когда что-то обрабатывается, чтобы показать пользователь что-то происходит. Есть ли способ сделать это, не открывая для этого целое окно? Я использую свинг. Спасибо.


person kentcdodds    schedule 04.04.2012    source источник


Ответы (2)


Вот два урезанных обучающих примера того, как вывести изображение на экран во всплывающем окне. При необходимости отрегулируйте источник изображения, положение, размер, обработку исключений и т. д.

Пример 1 из 2, полупрозрачный с использованием JLabel:

public static void main(String args[]) throws Exception {
JWindow jWindow = new JWindow() {
final Icon icon = new ImageIcon(<yourImage>);  // Okay to be animated
{
    setOpacity(.642f);
    setLocation(0,0);
    setSize(icon.getIconWidth(), icon.getIconHeight());
    add(new JLabel(icon));
    pack();
}
};
jWindow.setVisible(true);
Thread.sleep(3000);
jWindow.setVisible(false);
}

Пример 2 из 2, Прозрачный с использованием краски:

public static void main(String args[]) throws Exception {
JWindow jWindow = new JWindow() {
final Image image = ImageIO.read(<yourImage>);  // Static image only
{
    setLocation(0,0);
    setSize(image.getWidth(), image.getHeight());
}
public void paint(Graphics g) {
    g.drawImage(image, 0, 0, null);
}
};
jWindow.setVisible(true);
Thread.sleep(3000);
jWindow.setVisible(false);
}
person Java42    schedule 04.04.2012
comment
Мне очень нравится этот метод! Я хочу использовать первый, который вы упомянули, но когда я даю ему анимированный gif, он просто отображается как серый прямоугольник, в котором ничего нет. Когда я даю ему обычный png, он работает нормально. Кроме того, как изменить цвет фона? Сейчас он серый, я бы хотел, чтобы он был белым. Я пробовал setBackground(Color.white), но это не сработало. Спасибо за помощь, все будет отлично, когда я заработаю! - person kentcdodds; 05.04.2012
comment
Анимация работает в моей системе Win7/Eclipse/JDK17. Цвет фона не устанавливается, так как само изображение определяет цвет. - person Java42; 06.04.2012

Предполагая, что ваше приложение использует какой-либо контейнер Swing, я бы рекомендовал установить анимированный gif в качестве значка JLabel и поместить его на GlassPane контейнера. А затем переключайте эту панель, когда это необходимо.

Здесь частично релевантная реализация (обратите внимание на блокировку входных событий).

person mre    schedule 04.04.2012
comment
Я посмотрю на это! Большой! Я никогда раньше не слышал о GlassPane. Выглядит потрясающе! - person kentcdodds; 05.04.2012