我有一個JFrame。在那裏我有兩個容器,即兩個JPanel。一個小組擁有圖像。其他人擁有JButton。然後將這兩個添加到JTabbedPane。.gif圖像不會將其添加到JTabbed窗格
我的問題是使用.gif圖像時,圖像與任何其他正常的.jpg圖像一樣變得靜止。任何人都可以幫助我一些更多的想法?
這裏是我的代碼:
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageInputStream;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.UIManager.LookAndFeelInfo;
public class ICLOUD implements ActionListener {
private BufferedImage bg;
JButton b1;
private Object frame1;
JFrame frame2 = new JFrame();
JDesktopPane desktop = new JDesktopPane();
public ICLOUD() {
try {
URL url = this.getClass().getResource("anigif.gif");
bg = ImageIO.read(url);
} catch (IOException ex) {
}
JPanel tabPanel = new JPanel(new GridBagLayout()) {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bg, 0, 0, getWidth(), getHeight(), this);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 300);
}
};
JPanel buttons = new JPanel(new GridLayout(4, 1, 15, 15));
buttons.setOpaque(false);
ImageIcon icon5 = new ImageIcon(ICLOUD.class.getResource("hi.jpg"));
b1=new JButton("Hello");
buttons.add(b1);
tabPanel.add(buttons);
JTabbedPane tabPane = new JTabbedPane();
tabPane.addTab(null,icon5, tabPanel);
JFrame frame = new JFrame("I-CLOUD");
b1.setVisible(true);
frame.setContentPane(tabPane);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
}
ICLOUD r=new ICLOUD();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
這是'ImageIO'和'JPanel'繪製方式的限制。如果這對您很重要,請考慮使用'JLabel'並通過'ImageIcon'加載圖像。可以使用你的方法完成,是的,但你將負責加載框架和設置動畫線程... – MadProgrammer
@ MadProgrammer-你能提出任何其他方法嗎? – user3320152
除了使用'ImageIcon'?使用'ImageIO'子圖像功能從'GIF'中讀取每張圖像並自己動畫... – MadProgrammer