2

我想在扩展的 JFrame 上放置一个图像以将其设置为背景,扩展的 jframe 仅包含菜单栏。问题是,它不显示图片,我不知道我可能做错了什么。任何想法都受到高度赞赏

public class VirtualViewGUI extends JFrame{

    public VirtualViewGUI()
      {
         super("Virtual View");

         JMenuBar jmenuBar = new JMenuBar();
         JMenu fileMenu = new JMenu("File");
         JMenu helpMenu = new JMenu("Help");
         JMenu feel = new JMenu("Look & Feel");

         JMenu layOutMenu = new JMenu("ConfigureCells");
         JMenuItem add_files = new JMenuItem("Select Directory.."); 
         JMenuItem minCellSize = new JMenuItem("height 260 X  width 260"); 
         JMenuItem moderateCellSize = new JMenuItem("height 320 X  width 320"); 
         JMenuItem maxCellSize = new JMenuItem("height 360 X  width 360"); 
         JMenuItem exit = new JMenuItem("Exit");
         JMenuItem help = new JMenuItem("Help Content");

         fileMenu.add(add_files);
         fileMenu.add(exit);
         layOutMenu.add(minCellSize);
         layOutMenu.add(moderateCellSize);
         layOutMenu.add(maxCellSize);
         helpMenu.add(help);

         jmenuBar.add(fileMenu);
         jmenuBar.add(layOutMenu);
         jmenuBar.add(helpMenu);

         ImageIcon myImage=new ImageIcon("grid_2.png");

         JLabel icon = new JLabel(myImage);
         icon.setIcon(myImage);
         setJMenuBar(jmenuBar); 

         add(icon);


         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      }
}
4

3 回答 3

3

您的代码没有任何缺陷,因为当我在我的计算机上运行它时,它工作正常,如果图像的路径是好的。因此,如果我使用getClass().getResource("/pathToImageFolder/myImage.fileExtension"),它会给我想要的结果。似乎您需要检查您指定的路径,即“grid_2.png”,实际上是否是正确的路径!看看我的这个关于如何在 NETBEANS 中将图像添加到您的资源文件夹的答案,希望这可以帮助您更多。这是一个工作示例

import javax.swing.*;

public class VirtualViewGUI extends JFrame
{
    public VirtualViewGUI()
    {
        super("Virtual View");

        JMenuBar jmenuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu helpMenu = new JMenu("Help");
        JMenu feel = new JMenu("Look & Feel");

        JMenu layOutMenu = new JMenu("ConfigureCells");
        JMenuItem add_files = new JMenuItem("Select Directory.."); 
        JMenuItem minCellSize = new JMenuItem("height 260 X  width 260"); 
        JMenuItem moderateCellSize = new JMenuItem("height 320 X  width 320"); 
        JMenuItem maxCellSize = new JMenuItem("height 360 X  width 360"); 
        JMenuItem exit = new JMenuItem("Exit");
        JMenuItem help = new JMenuItem("Help Content");

        fileMenu.add(add_files);
        fileMenu.add(exit);
        layOutMenu.add(minCellSize);
        layOutMenu.add(moderateCellSize);
        layOutMenu.add(maxCellSize);
        helpMenu.add(help);

        jmenuBar.add(fileMenu);
        jmenuBar.add(layOutMenu);
        jmenuBar.add(helpMenu);

        ImageIcon myImage = new ImageIcon(
            getClass().getResource(
                    "/image/cow-cartoon.jpg"));

        JLabel icon = new JLabel(myImage);
        icon.setIcon(myImage);
        setJMenuBar(jmenuBar); 

        add(icon);

        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationByPlatform(true);    
        setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new VirtualViewGUI();
            }
        });
    }
}
于 2012-09-26T05:29:34.340 回答
3

不,一点问题都没有(除了可能没有使用正确的布局管理器)。

而是将图标“添加”到框架中,我会将图标作为框架的“内容”......

setContentPane(icon);

这意味着当您向框架添加任何其他组件时,将添加到图像顶部...

public VirtualViewGUI() {
    super("Virtual View");

    JMenuBar jmenuBar = new JMenuBar();
    JMenu fileMenu = new JMenu("File");
    JMenu helpMenu = new JMenu("Help");
    JMenu feel = new JMenu("Look & Feel");

    JMenu layOutMenu = new JMenu("ConfigureCells");
    JMenuItem add_files = new JMenuItem("Select Directory..");
    JMenuItem minCellSize = new JMenuItem("height 260 X  width 260");
    JMenuItem moderateCellSize = new JMenuItem("height 320 X  width 320");
    JMenuItem maxCellSize = new JMenuItem("height 360 X  width 360");
    JMenuItem exit = new JMenuItem("Exit");
    JMenuItem help = new JMenuItem("Help Content");

    fileMenu.add(add_files);
    fileMenu.add(exit);
    layOutMenu.add(minCellSize);
    layOutMenu.add(moderateCellSize);
    layOutMenu.add(maxCellSize);
    helpMenu.add(help);

    jmenuBar.add(fileMenu);
    jmenuBar.add(layOutMenu);
    jmenuBar.add(helpMenu);

    ImageIcon myImage = new ImageIcon("your picture here");

    JLabel icon = new JLabel(myImage);
    icon.setIcon(myImage);
    setJMenuBar(jmenuBar);

    // Don't add the icon to the content pane, make it the content pane, then when you add
    // anything to the frame, they will be added ontop... ;)
    setContentPane(icon);

    pack();
    setVisible(true);


    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

更新示例

我将以下代码添加到构造函数的末尾

setLayout(new GridBagLayout());
JLabel label = new JLabel("Look ma, no hands!");
label.setFont(label.getFont().deriveFont(Font.BOLD, 36f));
label.setForeground(Color.WHITE);
add(label);

并得到了这个输出

捕捉啤酒

于 2012-09-26T00:01:29.860 回答
0

我设法做对了,就像我最初怀疑的 NetBeans 和其他 IDE 一样,它工作正常,我需要为图像路径添加“src\\grid_2.png”,即使它在我的工作目录中。感谢大家的宝贵时间,非常感谢。

于 2012-09-26T12:47:38.620 回答