情况:我有一个JFrame
我已经设法导入GIF并在主面板中显示它,但它会将我的所有其他面板向下移动,导致我的GUI处于混乱状态。
问题:我应该如何将GIF作为背景而不是像我一样添加到主面板?
注意:代码只是制作Jframe
,设置详细信息,添加面板然后将GIF显示为Jlabel
。如果您需要代码,我可以在下面显示它。
答案 0 :(得分:2)
有几种方法可以实现这一目标......
使用JLabel
,将标签的图标属性设置为图像的参考。然后,您可以将布局管理器应用于标签,并将标签设置为其他组件的主容器,只需像往常一样将它们添加到其中......
IconImage image = ...;
JLabel background = new JLabel(image);
background.setLayout(...);
// You could set the frames content pane to the label and keep
// working as per normal, adding components to the frame
setContentPane(background);
// or, simply add components to it directly like any other container
background.add(...);
关于这个的好处是,如果GIF是动画的,它将包含正常播放...好的副作用。退回是,JLabel
不会为您调整图像大小...
将图像绘制到组件的背景中,如JPanel
,然后将剩余的组件添加到组件中。
这将允许您应用特殊效果,或者如果您愿意,可以调整图像大小。如果它是一个动画GIF,那么这会使它变得非常复杂,因为你需要自己动画帧。
看看......
了解更多详情
答案 1 :(得分:1)
现在按照@MadProgrammer正确指出的Oracle Swing UI-guidlines
添加背景的最佳方法是简单地绘制它。创建BackgroundPanel(扩展JPanel)并覆盖paintComponent(...);
public class BgPanel extends JPanel
{
//Overload and paint your background
public void paintComponent(Graphics g)
{
//create image object, or more preferably do that in the BgPanel constructor
g.drawImage(image, 0, 0, null);
}
}
根据Oracle使用Swing时的自定义渲染指南。
答案 2 :(得分:0)
你可以在style.css中这样做,这样就可以用于整个身体。
body {
background-position: center center;
background-image: url('../images/MyGif.gif');
background-repeat: no-repeat;
}
或为其创建一个类
.frame{
background-position: center center;
background-image: url('../images/MyGif.gif');
background-repeat: no-repeat;
}