我想在扩展的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);
}
}
答案 0 :(得分: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);
获得此输出
答案 1 :(得分:3)
你的代码没有任何缺陷,因为当我在计算机上运行它时,如果图像的路径良好,它工作正常。因此,如果我使用getClass().getResource("/pathToImageFolder/myImage.fileExtension")
,它会给我预期的结果。好像你需要检查你指定的路径,即“grid_2.png”,是否真的是正确的路径!!看看我关于HOW TO ADD IMAGES TO YOUR RESOURCE FOLDER IN NETBEANS的这个答案,希望这可能对你有所帮助。这是一个有效的example
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();
}
});
}
}
答案 2 :(得分:0)
我设法做对了,就像我最初怀疑的NetBeans一样,它工作正常,我需要为图像路径添加“src \\ grid_2.png”,即使它在我的内部工作目录。感谢大家的时间,非常感谢。