Java 如何将背景图像添加到JPanel?
我有一个JFrame,JPanel在里面。我的游戏的背景是完全黑色的,因为实体在上面。我只想用“最简单”的方式将背景从我的电脑变成一幅图像,而不需要做太多改变Java 如何将背景图像添加到JPanel?,java,image,swing,jframe,jpanel,Java,Image,Swing,Jframe,Jpanel,我有一个JFrame,JPanel在里面。我的游戏的背景是完全黑色的,因为实体在上面。我只想用“最简单”的方式将背景从我的电脑变成一幅图像,而不需要做太多改变 public Game() { // Frame JFrame container = new JFrame("Space Invaders"); // Resolution JPanel panel = (JPanel) container.getContentPane(); panel.set
public Game() {
// Frame
JFrame container = new JFrame("Space Invaders");
// Resolution
JPanel panel = (JPanel) container.getContentPane();
panel.setPreferredSize(new Dimension(800,600));
panel.setLayout(null);
// Canvas Size
panel.setBounds(0,0,800,600);
panel.add(this);
// Window Visible
container.pack();
container.setResizable(false);
container.setVisible(true);
container.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
你可以。。。
使用JLabel
作为背景组件
JFrame container = new JFrame("Space Invaders");
JLabel label = new JLabel(new ImageIcon(ImageIO.read(...)));
label.setLayout(new BorderLayout());
container.setContentPane(label);
// Resolution
// There are simply so many different ways to achieve this
// that are better it's not funny
//JPanel panel = (JPanel) container.getContentPane();
//panel.setPreferredSize(new Dimension(800, 600));
//panel.setLayout(null);
// Canvas Size
//setBounds(0, 0, 800, 600);
//panel.add(this);
// Window Visible
container.pack();
container.setResizable(false);
container.setVisible(true);
container.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Pointless
//container.addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
// System.exit(0);
// }
//});
这方面的问题是:
图标
和文本
属性来计算标签的首选大小
java.awt.Canvas
,那么它将覆盖此组件,因为java.awt.Canvas
不能透明Graphics#drawImage
绘制背景图像
一般来说,这将是一个更好的解决方案,因为您可以完全控制图像的大小和位置,如果您使用java.awt.Canvas
和BufferStrategy
有关更多详细信息,请参见和,您可以。。。
使用JLabel
作为背景组件
JFrame container = new JFrame("Space Invaders");
JLabel label = new JLabel(new ImageIcon(ImageIO.read(...)));
label.setLayout(new BorderLayout());
container.setContentPane(label);
// Resolution
// There are simply so many different ways to achieve this
// that are better it's not funny
//JPanel panel = (JPanel) container.getContentPane();
//panel.setPreferredSize(new Dimension(800, 600));
//panel.setLayout(null);
// Canvas Size
//setBounds(0, 0, 800, 600);
//panel.add(this);
// Window Visible
container.pack();
container.setResizable(false);
container.setVisible(true);
container.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Pointless
//container.addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
// System.exit(0);
// }
//});
这方面的问题是:
图标
和文本
属性来计算标签的首选大小
java.awt.Canvas
,那么它将覆盖此组件,因为java.awt.Canvas
不能透明Graphics#drawImage
绘制背景图像
一般来说,这将是一个更好的解决方案,因为您可以完全控制图像的大小和位置,如果您使用java.awt.Canvas
和BufferStrategy
有关更多详细信息,请参见和,创建
JLabel
,将其布局设置为BorderLayout
,将图像像其他标签一样应用于它,将其设置为框架的contentPane
,然后继续。当然,您可以简单地使用Graphics#drawImage
,但由于我不知道您的代码实际上是如何工作的,因此很难对“最简单”的内容提出建议,也可以尝试此处建议的内容创建JLabel
,将其布局设置为BorderLayout
,将图像像其他标签一样应用于它,将此设置为框架的contentPane
,然后继续。当然,您可以简单地使用Graphics#drawImage
,但因为我不知道您的代码实际上是如何工作的,所以很难对“最简单”的内容提出建议,也可以尝试一下这里的建议