java 如何为一个窗体设置背景图片

要为一个窗体添加背景图片,必须知道绘制JComponent组件的过程。Swing轻量组件的绘制是组件和组件UI代表合作的结果。

代码 设置窗体背景图片:

import java.awt.*;import java.awt.event.*;import javax.swing.*; public class GraExp extends JFrame{ CInstead c1=new CInstead();Container c;JLabel lbl1=new JLabel("姓名:" );JLabel lbl2=new JLabel("密码:" );JTextField tf1=new JTextField(10),tf2=new JTextField(10); public GraExp(){ setContentPane(c1);c=getContentPane();c.setLayout(new FlowLayout(FlowLayout.LEFT));c.add(lbl1);c.add(tf1);c.add(lbl2);c.add(tf2); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);setSize(new Dimension(400,300));show();} public static void main(String[] args){ GraExp ge=new GraExp();} class CInstead extends JPanel{ ImageIcon icon;Image img;public CInstead(){ icon=new ImageIcon(GraExp.class.getResource("333.png" ));img=icon.getImage();} public void paintComponent(Graphics g){ super.paintComponent(g);g.drawImage(img,0,0,null );} } }

界面运行图如下:

程序分析:JComponent.paint先绘制组件,然后绘制组件的边框,再绘制组件的子组件。调用的顺序确保组件、边框和子组件都是可视的。如果组件有一个 UI代表,则JComponent.paintComponent调用该代表的Update方法,该方法为不透明组件擦除背景,然后绘制组件。CInstead是一个不透明的组件,如果重载paint方法,其背景图是无法被擦除的,,因此,即使更新了组件的所有包含组件,在界面上是看不到的。所以必须重载paintComponent方法,在绘制子组件前先擦除背景。对双缓存组件,paint方法负责把组件绘制到屏外缓存中,然后把屏外缓存拷贝到组件的屏上代表中,正因为如此,我们不建议为Swing组件重载paint,如果需要重新定义如何绘制组件,那么就重载paintComponent()。

黄色蓝色或者砖红色,犹如童话世界。

java 如何为一个窗体设置背景图片

相关文章:

你感兴趣的文章:

标签云: