我有JFrame
BorderLayout
,所有方面都有面板(北,东,......)。在面板中主要有标签和按钮。
现在我希望框架有背景图像,一些研究告诉我,我必须更改框架的内容窗格。
但是当我尝试这个时,内容会被放到后台并且不可见。此外,如果调整帧大小,我也不知道如何调整图像大小。
对此有一个简单的解决方法,还是我必须重做大部分代码?
答案 0 :(得分:4)
将JPanel
(或JComponent
)的背景图片添加到BorderLayout.CENTER
,然后此JPanel
填充整个JFrame
区域,其他人JComponents
已加入此JPanel
there are Jpanels on all sides (North, East ,...). In the Jpanels there are Jlabels and Jbuttons mostly.
这些JComponents
涵盖Rectangle
的所有可用JFrame
,然后Background Image
(从我的第一点开始)永远不会被删除,因为这些JComponents
是on_top JFrame
也可以隐藏此Image
,
添加JPanel with Background Image
(从我的第一点开始),然后使用JPanel(s)
添加另一个JPanel#setOpaque(false);
,然后此JPanel
将是透明的,请注意{{1默认情况下已实施JPanel
答案 1 :(得分:1)
frame.getContentPane().add(new JPanel() {
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight());
}
});
答案 2 :(得分:0)
此示例将帮助您入门。像任何JPanel一样使用它。
public class JPanelWithBackground extends JPanel {
Image imageOrg = null;
Image image = null;
{
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
int w = JPanelWithBackground.this.getWidth();
int h = JPanelWithBackground.this.getHeight();
image = w>0&&h>0?imageOrg.getScaledInstance(w,h,
java.awt.Image.SCALE_SMOOTH):imageOrg;
JPanelWithBackground.this.repaint();
}
});
}
public JPanelWithBackground(Image i) {
imageOrg=i;
image=i;
setOpaque(false);
}
public void paint(Graphics g) {
if (image!=null) g.drawImage(image, 0, 0, null);
super.paint(g);
}
}
用法示例:
Image image = your image
JFrame f = new JFrame("");
JPanel j = new JPanelWithBackground(image);
j.setLayout(new FlowLayout());
j.add(new JButton("YoYo"));
j.add(new JButton("MaMa"));
f.add(j);
f.setVisible(true);