【问题标题】:Setting image background java swing设置图像背景java swing
【发布时间】:2021-08-07 23:04:43
【问题描述】:

我正在尝试将图像设置为背景,但我不确定此代码本身有什么问题。请您在这里提供帮助并指出可以更改的内容吗?当我运行它时,它像以前一样给我一个空白背景,没有预期的结果。

public
    class MenuFrame extends JFrame {

    public MenuFrame(){
        generateMenuFrame();
    }

    public void generateMenuFrame()
    {
        JLabel background;
        JFrame menuFrame = new JFrame("Koronawirus AntiPlague - Menu");
        try {
            menuFrame.setIconImage(ImageIO.read(MenuFrame.class.getResourceAsStream("resources/images/Icon.png")));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        ImageIcon backgroundImage = new ImageIcon("resources/images/MenuBackground.png");
        background = new JLabel("",backgroundImage,JLabel.CENTER);
        background.setBounds(0,0,getWidth(),getHeight());
        menuFrame.add(background);
        menuFrame.setSize(700,400);
        menuFrame.setVisible(true);
        menuFrame.setResizable(false);
        menuFrame.setLocationRelativeTo(null);
        menuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

更新:

谢谢你们的任何提示。正如 Andrew 建议的那样,我决定保留一个没有扩展的实例,而且我使用了 paintComponent 方法的覆盖:

public
    class MenuFrame {

    private JPanel contentPane;

    public MenuFrame(){
        generateMenuFrame();
    }

    public void generateMenuFrame()
    {
        JFrame menuFrame = new JFrame("Koronawirus AntiPlague - Menu");
        try {
            menuFrame.setIconImage(ImageIO.read(MenuFrame.class.getResourceAsStream("resources/images/Icon.png")));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        menuFrame.setSize(700,400);
        menuFrame.setVisible(true);
        menuFrame.setResizable(false);
        menuFrame.setLocationRelativeTo(null);
        menuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        contentPane = new JPanel() {
                public void paintComponent(Graphics g) {
                                      Image img = Toolkit.getDefaultToolkit().getImage(
                                      MenuFrame.class.getResource("resources/images/MenuBackground.jpg"));
                                      g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
                                     }
               };
        menuFrame.setContentPane(contentPane);
    }
}

【问题讨论】:

  • 1) 对于初学者,BG 图像需要作为应用程序资源加载,就像代码对图标所做的那样。 2) 代码既扩展了 frame 又创建了 one 的实例。放弃第一个,坚持第二个。
  • 没有必要extends JFrame,因为你没有改变它的任何行为。以this answer为起点

标签: java swing embedded-resource


【解决方案1】:
background.setBounds(0,0,getWidth(),getHeight());

上面的代码会将标签的大小设置为 (0, 0),因为您正在扩展 JFrame 并调用框架的 getWidth() 和 getHeight() 方法。所有 Swing 组件的默认大小都是 (0, 0),所以没有什么要绘制的。

不要试图玩弄标签的边界。

标签的大小会自动设置为图片的大小。

然后你应该使用:

//menuFrame.setSize(700,400);
menuFrame.pack();

因此框架的大小可以正确显示标签及其图像。

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 2023-03-14
    • 1970-01-01
    • 2015-02-08
    • 2012-08-04
    • 2011-01-14
    • 1970-01-01
    • 2023-01-04
    • 2023-03-04
    相关资源
    最近更新 更多