我有一个扩展JFrame的类,它包含3个面板+另一个在布局中将所有3个面板保持在一起的面板。
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add("North", panel2); //row of buttons
panel.add("Center",grid); // grid of buttons
panel.add("South",panel3); // a textfield that stretches across the total width of the frame
add(panel);
JLabel background = new JLabel (new ImageIcon ("C:\\.png"));
background.setBounds (0,0,500,550);
add(background);
//the background for the frame
setVisible (true);
setResizable (false);
setBounds (398,70, 570, 620);
setDefaultCloseOperation (EXIT_ON_CLOSE);
我的问题是该程序为我提供了一个输出,其中jlabel中的背景图像/图像仅可见或以某种方式遮盖了面板/使按钮不可见。我需要背景图像在按钮后面,我的意思是这就是为什么它被称为背景我错过了什么?
答案 0 :(得分:1)
可能最简单的方法是简单地将JLabel
设为框架的内容窗格...
JLabel background = new JLabel (new ImageIcon ("C:\\.png"));
setContentPane(background);
由此产生的下一个事实是JLabel
默认情况下没有布局管理器,这使得向其添加其他内容有点困难(或者至少,不会导致您希望提供的内容)因此,接下来,您需要设置布局管理器...
setLayout(new BorderLayout()); // Forwarded to the content pane...
然后,您可以愉快地添加所有内容......
add(panel2, BorderLayout.NORTH); //row of buttons
add(grid); // grid of buttons
add(panel3, BorderLayout.SOUTH); // a textfield that
您可能遇到的下一个问题是大多数组件都是不透明的,因此如果您希望查看背景信息,则可能需要在要添加的组件上调用setOpaque(false)
... < / p>
最后......
setVisible (true);
setResizable (false);
这会导致一些问题,请尝试使用...
setResizable(false);
pack();
setVisible(true);
ps- JLabel
不会自动调整图片大小,但打包应该会有所帮助...假设其余内容符合背景图片的大小......