public class JPanelWithBackground extends JPanel {
private Image backgroundImage;
// Some code to initialize the background image.
// Here, we use the constructor to load the image. This
// can vary depending on the use case of the panel.
public JPanelWithBackground(String fileName) throws IOException {
backgroundImage = ImageIO.read(new File(fileName));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw the background image.
g.drawImage(backgroundImage, 0, 0, this);
}
}
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();
}
}
8条答案
按热度按时间sxpgvts31#
电影中没有“背景图像”的概念
JPanel
,因此必须编写自己的方法来实现此功能。实现这一点的一种方法是覆盖
paintComponent
方法在每次打印时绘制背景图像JPanel
它被刷新了。例如,一个将子类a
JPanel
,并添加一个字段以保存背景图像,并覆盖paintComponent
方法:(以上代码尚未测试。)
以下代码可用于添加
JPanelWithBackground
变成JFrame
:在本例中
ImageIO.read(File)
方法用于读取外部jpeg文件。d7v8vwbk2#
通过将框架的内容窗格替换为可绘制图像的jpanel,可以轻松完成此操作:
此示例还将面板的布局设置为borderlayout,以匹配默认内容窗格布局。
(如果您在查看图像时遇到任何问题,您可能需要致电
setOpaque(false)
在其他一些组件上,以便您可以看到背景。)vc9ivgsu3#
背景面板条目根据您的需求显示了两种不同的方式。
pdsfdshx4#
您可以创建组件的子类
http://www.jguru.com/faq/view.jsp?eid=9691
或者摆弄 Package 纸
http://www.java-tips.org/java-se-tips/javax.swing/wrap-a-swing-jcomponent-in-a-background-image.html
ecfdbz9o5#
这里是另一种不使用额外面板的快速方法。
dohp0rv56#
如果您使用的是netbeans,则可以将jlabel添加到帧中,并通过属性将其图标更改为图像并删除文本。然后通过navigator将jlabel移动到jframe或任何内容窗格的底部
kxeu7u2r7#
也许最简单的方法是添加一个图像,缩放它,并将其设置为jframe/jpanel(在我的例子中是jpanel),但记住只有在添加了其他子组件之后才能将其“添加”到容器中。
s71maibg8#