Я хочу добавить загружаемый анимированный значок gif в окно вывода разрабатываемого мной приложения платформы NetBeans. Мне удалось добавить файл значка png. Но в этом случае добавленный значок gif не является анимированным. он остается прежним.
private class Loading extends AbstractAction {
public Loading() {
//putValue(SMALL_ICON, ImageUtilities.loadImageIcon("org/netbeans/modules/plsql/execution/loading.gif", true));
putValue(SMALL_ICON, ImageUtilities.loadImage("org/netbeans/modules/plsql/execution/loading.gif",true));
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action performed");
}
}
Это то, что я использовал в качестве окна вывода.
final InputOutput io = IOProvider.getDefault().getIO("Deploy Dependents", new Action[]{new Loading()});
@ Роберт, да. Изображение было показано в нужном месте, но не анимировалось и не двигалось.




вы можете попробовать приведенный ниже код, он загружает изображение в формате GIF с анимацией.
Думаю, вам понадобится только эта часть кода:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("gif.gif").getFile());
Image image = Toolkit.getDefaultToolkit().createImage(org.apache.commons.io.IOUtils.toByteArray(new FileInputStream(file)));
ImageIcon icon = new ImageIcon(image);
Пример полного кода добавлен ниже:
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
public class AnimationTest extends JFrame {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
AnimationTest test = new AnimationTest();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setVisible(true);
}
});
}
public AnimationTest() {
super();
try {
JLabel label = new JLabel();
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("gif.gif").getFile());
Image image =
Toolkit.getDefaultToolkit().createImage(org.apache.commons.io.IOUtils.
toByteArray(new FileInputStream(file)));
ImageIcon icon = new ImageIcon(image);
label.setIcon(icon);
icon.setImageObserver(label);
add(label);
pack();
} catch (Exception e) {
e.printStackTrace();
}
}
}
добавлен тот же код с проектом jave в github, вы можете получить полный код оттуда.
загрузка изображения в формате GIF в Java с анимацией
Кроме того, вам необходимо использовать приведенную ниже зависимость apache commons для образца кода
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
Это не совсем то, что я ищу. Я хочу добавить gif-анимацию на вкладку окна вывода
что вы имеете в виду под вкладкой окна вывода? вы можете поделиться полным образцом кода? в любом случае, если вы хотите анимировать gif, вам нужно загрузить как поток и сделать его imageIcon.
ваш вопрос до сих пор не ясен. Я предлагаю вам предоставить свой код для методов, связанных с ImageUtilities.loadImage (..) и IOProvider.getDefault (). GetIO (..). потому что без этого невозможно попробовать.
Я знаю, как добавить изображение. Это не моя проблема. Если вы снова прочитаете этот вопрос, мой вопрос заключался в том, что добавленное мной изображение не было анимированным, хотя это был анимированный Gif. И я предоставил все необходимые коды
ButtonUI не поддерживает анонимное изображение, а не метку; если вы попробуете код Диланки, вы увидите. что самый простой способ - сделать то, что вы хотите, создать метку, которая будет прослушивать MouseEvent для выполнения действия
@Arnault, JButtonделает поддерживает анимацию, поскольку он реализует ImageObserver.
Вам нужно добавить кнопку как ImageObserver того Image, который вы загрузили вместе с ImageUtilities.loadImage(). Он позаботится об анимации за вас.
Доступ к самой кнопке может быть скрыт классом IOProvider, но если вам удастся разобраться с ней, просто вызовите image.setImageObserver(button), и вы увидите, что анимация запущена.
Вы пробовали использовать
ImageIcon, как в этом ответе: stackoverflow.com/a/42284050/150978?