【问题标题】:Java, Put a panel on the background image of frameJava,在框架的背景图像上放置一个面板
【发布时间】:2013-04-23 13:22:50
【问题描述】:

我正在尝试编写一个复古的蛇游戏。我设置了一个旧诺基亚的背景图像,我想从它的屏幕上播放蛇。但是,我不能将我的游戏面板放在我的背景图像上。 我可以这样做吗? 我将此代码用于我的背景图片。

谢谢。

JFrame frame = new JFrame("Retro Snake");
    frame.getContentPane().add(new GamePanel());
    try {
        frame.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("Images\\background.jpg")))));
    } catch (IOException e) {
        e.printStackTrace();
    }
    frame.setLocation(500, 100);
    frame.pack();
    frame.setVisible(true);

【问题讨论】:

  • 与其将JPanel 放在图像上,不如使用自定义绘画创建JPanel。请参阅 this 链接。
  • @ExtremeCoders:我认为将图像放入 ImageIcon、JLabel 并使 JLabel 成为 contentPane 没有问题,事实上我已经多次这样做了。您预计此设置会出现什么问题?
  • @HovercraftFullOfEels 问题是,如果我们希望图像根据JPanel's 大小自行缩放,那么上述设置将无法实现
  • @ExtremeCoders:好的,我会同意的。

标签: java image swing layout


【解决方案1】:
  • 不要将 JPanel 添加到只在下一行或两行丢弃的 contentPane(就像您当前所做的那样)。
  • 通过setLayout(new BorderLayout()) 为您的新 contentPane-JLabel 提供 BorderLayout
  • 将游戏面板添加到上面的 JLabel,Borderlayout.CENTER。
  • 确保通过调用 setOpaque(false) 使游戏面板 JPanel 不透明,以便背景 JLabel 显示其图像。

【讨论】:

    猜你喜欢
    • 2012-03-22
    • 2012-11-27
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多