我正在研究一个项目,我需要显示一个我已经绘制过的图像。我需要一个背景图像和几个可以移动的前景图像。最简单的方法是什么?我找不到明确的答案。
ImageIcon image = new ImageIcon("imagename.jpg");
JLabel label = new JLabel("", image, JLabel.CENTER);
JPanel panel = new JPanel(new BorderLayout());
panel.add( label, BorderLayout.CENTER );
return panel;
答案 0 :(得分:1)
答案取决于。您想调整背景图像的大小以满足客户端的要求吗?如果是这样,您是否想要将图像“填充”或“适合”该区域。
请查看Java: maintaining aspect ratio of JPanel background image,以便对该主题进行更长时间的讨论。
您需要问的下一个问题是,您是想在表面上绘制动画还是使用现有组件并移动它们......
你可以查看......
使用paintComponent
或直接绘画方法。
这种方法相对常见且易于控制。问题是如果你想要执行子动画(即将实际元素与主动画分开动画...想想走路或旋转),那就变得更加困难了。
结帐
使用组件代替。如果您想提供子动画,这种方法很好,但是复杂性要求您在容器中调整组件的大小和位置。
正如旁注。 JLabel
是一个容器;)
答案 1 :(得分:0)
我发现最简单的方法是创建一个全新的类并像这样扩展JPanel:
import javax.swing.*;
import javax.imageio.*;
import java.io.*;
import java.awt.*;
public class Background extends JPanel {
private Image image;
public Background(){
this.setPreferredSize(new Dimension(width,height));
image =Toolkit.getDefaultToolkit().getImage("your_image.jpg");;
}
public void paintComponent(Graphics g) {
//paints the background image
super.paintComponent(g);
do{
}while(g.drawImage(image, 0, 0, null)==false);
}
}
要实例化此类,只需调用:
Background b= new Background();
来自您的主程序。
请记住,b现在充当Jpanel,因此您只需拨打b.add(element)
如果您不理解我所谈论的内容并向您展示,请查看有关扩展课程的文档: