JFrame 背景图像
2022-09-04 05:53:53
我正在创建一个GUI,尽管是一个简单的GUI,并且我希望有一个背景图像(2048 X 2048)填充整个窗口,并在左上角放置一个正方形,偶尔可以加载64 X 64图像。提前感谢任何帮助:)编辑:我已经知道如何使JFrame成为一个设定的大小,这是我需要帮助的图像加载。
我正在创建一个GUI,尽管是一个简单的GUI,并且我希望有一个背景图像(2048 X 2048)填充整个窗口,并在左上角放置一个正方形,偶尔可以加载64 X 64图像。提前感谢任何帮助:)编辑:我已经知道如何使JFrame成为一个设定的大小,这是我需要帮助的图像加载。
这是一个在 JFrame 中添加背景图像的简单示例:
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();
}
}
加载映像的最佳方式是通过 ImageIO
API
BufferedImage img = ImageIO.read(new File("/path/to/some/image"));
有多种方法可以将图像呈现到屏幕上。
您可以使用 .这是最简单的方法,如果你不想修改图像...JLabel
JLabel background = new JLabel(new ImageIcon(img));
然后,只需将其添加到您认为合适的窗口中即可。如果您需要向其添加组件,则只需将标签的布局管理器设置为所需的任何内容,然后添加组件即可。
但是,如果您需要更复杂的内容,需要以某种方式更改图像或想要应用其他效果,则可能需要使用自定义绘画。
第一个 cavert:永远不要直接在顶级容器上绘画(如 )。顶级容器不是双重缓冲的,因此您最终可能会在重绘之间闪烁,其他对象位于窗口中,因此更改其绘制过程很麻烦,并且可能导致其他问题,并且框架具有边框,这些边框在窗口的可视区域内呈现...JFrame
相反,请创建一个自定义组件,从类似 的东西扩展。覆盖它的方法并呈现你的输出,例如...JPanel
paintComponent
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, this);
}