import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class BackgroundImageJFrame extends JFrame
{
JButton b1;
JLabel l1;
public BackgroundImageJFrame()
{
setTitle("Background Color for JFrame");
setSize(400,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
/*
One way
-----------------
setLayout(new BorderLayout());
JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png"));
add(background);
background.setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
background.add(l1);
background.add(b1);
*/
// Another way
setLayout(new BorderLayout());
setContentPane(new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png")));
setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
add(l1);
add(b1);
// Just for refresh :) Not optional!
setSize(399,399);
setSize(400,400);
}
public static void main(String args[])
{
new BackgroundImageJFrame();
}
}
4条答案
按热度按时间dbf7pr2w1#
这是一个在JFrame中添加背景图像的简单示例:
ygya80vv2#
加载映像的最佳方式是通过
ImageIO
API有多种方法可以将图像渲染到屏幕上。
你可以使用
JLabel
。如果你不想修改图像,这是最简单的方法...然后只要将它添加到你的窗口中,如果你需要添加组件,那么你可以简单地设置标签的布局管理器,然后添加你需要的组件。
但是,如果需要更复杂的效果,需要以某种方式更改图像或要应用附加效果,则可能需要使用自定义绘制。
第一个洞穴:不要直接绘制到顶层容器(如
JFrame
)。顶层容器不是双缓冲的,所以你可能会在重画之间出现一些 Flink ,其他对象在窗口上,所以改变它的绘制过程是很麻烦的,可能会导致其他问题,并且帧的边框渲染在窗口的可视区域内。相反,创建一个自定义组件,从
JPanel
之类的东西扩展而来,覆盖它的paintComponent
方法并将输出呈现给它,例如...有关详细信息,请参阅Performing Custom Painting和2D Graphics
nc1teljy3#
我使用了一个非常类似于@bott的方法,但是我稍微修改了一下,使它不需要调整图像的大小:
每次都有效。您还可以获得jFrame的宽度和高度,并使用它们分别代替800和508。
nwlls2ji4#
您可以:
在Jframe类构造函数的第一行,这对我来说很好