标签中gif的Java问题
我试图放入JPanel的gif在单击触发它的按钮后不会显示,直到我调整窗口大小。当它确实出现时,它不适合JPanel并且没有设置动画。我看了几篇关于这方面的文章,但我不知道如何在我的案例中使用它们标签中gif的Java问题,java,swing,user-interface,jpanel,gif,Java,Swing,User Interface,Jpanel,Gif,我试图放入JPanel的gif在单击触发它的按钮后不会显示,直到我调整窗口大小。当它确实出现时,它不适合JPanel并且没有设置动画。我看了几篇关于这方面的文章,但我不知道如何在我的案例中使用它们 /* * Author: Raymo111 * Date: 13/04/2018 * Description: Wishes happy birthday to a special someone */ //Imports java GUI classes import javax.imag
/*
* Author: Raymo111
* Date: 13/04/2018
* Description: Wishes happy birthday to a special someone
*/
//Imports java GUI classes
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
// Main class with JFrame and ActionListener enabled
public class Happy_Birthday_GUI extends JFrame implements ActionListener {
// Class variables
private static JButton startButton = new JButton("CLICK TO START");
private static JPanel startPanel = new JPanel(), gifPanel = new JPanel();
private static Color blue = new Color(126, 192, 238), pink = new Color(255, 192, 203);
private static GridLayout grid1 = new GridLayout(1, 1);
// Constructor
public Happy_Birthday_GUI() {
// Initial screen
startButton.addActionListener(this);
startButton.setFont(new Font("Comic Sans MS", Font.PLAIN, 50));
startPanel.setLayout(grid1);
startPanel.add(startButton);
startPanel.setBorder(BorderFactory.createLineBorder(blue, 100));
startButton.setBackground(pink);
getContentPane().add(startPanel);
// Sets title, size, layout (grid 1x1), and location of GUI window (center)
setTitle("Happy Birthday from Dolphin");
setSize(840, 840);
setLayout(grid1);
setLocationRelativeTo(null);
setVisible(true);
}
// Main method
public static void main(String[] args) {
new Happy_Birthday_GUI();
}
// Action Performed method
public void actionPerformed(ActionEvent event) {
// Proceed to gif and song
if (startButton == event.getSource()) {
getContentPane().removeAll();
BufferedImage dolphin;
gifPanel.setLayout(grid1);
gifPanel.setBorder(BorderFactory.createLineBorder(pink, 100));
try {
dolphin = ImageIO.read(new File("C:\\Users\\raymo\\Pictures\\dolphin.gif"));
JLabel gifLabel = new JLabel(new ImageIcon(dolphin));
gifPanel.add(gifLabel);
} catch (IOException e) {
e.printStackTrace();
}
getContentPane().add(gifPanel);
}
}
}
这是dolphin.gif。很可爱
如何让它在单击开始按钮后立即显示为适合JPanel的动画gif?提前谢谢 我试着输入一个JPanel,但点击按钮后它没有出现 从可见GUI添加(或删除)组件时,基本代码为:
panel.add(...);
panel.revalidate();
panel.repaint();
需要使用revalidate()调用布局管理器,以便为组件指定大小
没有动画
使用带有图像图标的JLabel来显示图像。JLabel将为gif设置动画
当它出现时,它不适合JPanel和
您可以尝试填充标签可用空间的
我试着输入一个JPanel,但点击按钮后它没有出现
从可见GUI添加(或删除)组件时,基本代码为:
panel.add(...);
panel.revalidate();
panel.repaint();
需要使用revalidate()调用布局管理器,以便为组件指定大小
没有动画
使用带有图像图标的JLabel来显示图像。JLabel将为gif设置动画
当它出现时,它不适合JPanel和
您可以尝试使用设计用于填充标签可用空间的。我最后做了:
gifPanel.add(new TestPane());
getContentPane().add(gifPanel);
revalidate();
repaint();
使用camickr的重新验证和重新绘制,以及MadProgrammer的TestPane类,
这非常有效,可以让gif动画化、正确调整大小并立即显示。我最后做了:
gifPanel.add(new TestPane());
getContentPane().add(gifPanel);
revalidate();
repaint();
使用camickr的重新验证和重新绘制,以及MadProgrammer的TestPane类,
它可以很好地使gif动画化、正确调整大小并立即显示。
BuffereImage
不支持绘制动画gif,相反,您需要使用Image
(或者最好是ImageIcon
)
这可以直接应用于JLabel
,它将自己执行动画操作
适合JPanel的动画gif
好的,这是一个更复杂的问题。一种方法是将Gif转换为所需的大小,但不用说,这非常非常复杂
一个更简单的解决方案可能是使用仿射变换
并缩放图像以满足组件本身的要求。这需要一个自定义组件,能够计算比例并绘制图像的每一帧
幸运的是,JPanel
是一个ImageObserver
,这意味着它能够绘制gif动画
BufferedImage
不支持绘制动画GIF,相反,您需要使用Image
(或者最好是ImageIcon
)
这可以直接应用于JLabel
,它将自己执行动画操作
适合JPanel的动画gif
好的,这是一个更复杂的问题。一种方法是将Gif转换为所需的大小,但不用说,这非常非常复杂
一个更简单的解决方案可能是使用仿射变换
并缩放图像以满足组件本身的要求。这需要一个自定义组件,能够计算比例并绘制图像的每一帧
幸运的是,JPanel
是一个ImageObserver
,这意味着它能够绘制gif动画
重新绘制不起作用,如何使用拉伸图标?
重新绘制不起作用代码>-为什么要将标签添加到面板,然后将面板添加到内容窗格?在这种情况下,您需要重新验证()内容窗格,因为它是您实际添加到框架中的组件。在这种情况下,您可以在JFrame上使用revalidate()代码>或重新绘制()
提供了一个空白屏幕。提供了一个空白屏幕。
-一旦使用ImageIcon(…)而不是ImageIO加载图像,我在这里提出的所有建议对我来说都很好。您错误地更改了代码我不知道如何使用的stretchIcon,它就像ImageIcon一样。阅读链接。下载课程。查看API并选择适当的构造函数来读取图像。@Raymo111,你的意思是什么?。你是那个无视我建议的人。我建议使用StretchIcon,它与ImageIcon一样易于使用。StretchIcon还可以用于任何其他可以使用图标(如JButton)的组件(尽管动画GIF仅适用于JLabel)。我还告诉过您,您的代码很好,只需在正确的位置添加revalidate()。如果事实是我重复了很多次。这是什么意思?在这次谈话中,你没有一次对帮助说“谢谢”。你所做的就是不断寻求更多的帮助!重新绘制不起作用,如何使用拉伸图标?重新绘制不起作用代码>-为什么要将标签添加到面板,然后将面板添加到内容窗格?在这种情况下,您需要重新验证()内容窗格,因为它是您实际添加到框架中的组件。在这种情况下,您可以在JFrame上使用revalidate()代码>或重新绘制()
提供了一个空白屏幕。提供了一个空白屏幕。
-一旦使用ImageIcon(…)而不是ImageIO加载图像,我在这里提出的所有建议对我来说都很好。您错误地更改了代码我不知道如何使用的stretchIcon,它就像ImageIcon一样。阅读链接。下载课程。查看API并选择适当的构造函数进行阅读