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

いいえ、まったく問題はありません (適切なレイアウト マネージャーを使用していないことを除けば)。

フレームにアイコンを「追加」するのではなく、アイコンをフレームの「コンテンツ」にします...

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 に答える
3

画像へのパスが適切であれば、コンピューターで実行したときに問題なく動作するため、コードに欠陥はありません。したがって、を使用するgetClass().getResource("/pathToImageFolder/myImage.fileExtension")と、望ましい結果が得られます。あなたが指定したパス、つまり"grid_2.png"が実際に正しいパスであるかどうかを確認する必要があるようです!! HOW TO ADD IMAGES TO YOUR RESOURCE FOLDER IN NETBEANSに関する私のこの回答をご覧ください。これがさらに役立つことを願っています。ここに1つの実用的な例があります

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 に答える
0

私はそれを正しく行うことができました。他のIDEと同様に、最初は正常に機能していると思っていたNetBeansを使用していました。作業ディレクトリ内にある場合でも、イメージパスに「src\\grid_2.png」を追加する必要がありました。みなさん、ありがとうございました。本当にありがとうございました。

于 2012-09-26T12:47:38.620 に答える