java swing 局部panel背景图片,图片随窗体变化 (转)



1
import java.awt.BorderLayout; 2 import java.awt.Color; 3 import java.awt.Graphics; 4 import java.awt.GridLayout; 5 import javax.swing.ImageIcon; 6 import javax.swing.JButton; 7 import javax.swing.JFrame; 8 import javax.swing.JLabel; 9 import javax.swing.JPanel; 10 import javax.swing.JTextField; 11 public class CreatFrame { 12 JLabel label1 = new JLabel("考试系统", JLabel.CENTER); 13 JTextField textfield2 = new JTextField("请输入姓名"); 14 JTextField textfield1 = new JTextField("请输入密码"); 15 JButton button1 = new JButton("确定"); 16 public static void main(String[] args) { 17 CreatFrame cf = new CreatFrame(); 18 cf.creatframe(); 19 } 20 @SuppressWarnings("serial") 21 private void creatframe() { 22 final JFrame frame = new JFrame("登陆界面"); 23 JLabel label2 = new JLabel("姓名"); 24 JLabel label3 = new JLabel("密码"); 25 JButton button2 = new JButton("取消"); 26 JButton button3 = new JButton("考生必看"); 27 button1.setEnabled(false); 28 // 方法一: 29 // JPanel panel6 = new JPanel() { 30 // public void paint(Graphics g) { 31 // // 下面是取得你的背景图片,你根据你自己的要求来取得这个图片,不管什么方法,得到就OK 32 // ImageIcon icon = 33 // new 34 // ImageIcon(ClassLoader.getSystemResource("2009517719856277802.jpg")); 35 // icon.paintIcon(frame, g, 0, 0); 36 // // 最后调用父方法,否则重画背景时会把label覆盖住 37 // super.paint(g); 38 // } 39 // }; 40 // 方法二: 41 JPanel panel6 = new JPanel() { 42 public void paintComponent(Graphics g) { 43 ImageIcon icon = 44 new ImageIcon("D:\\workspace\\Amyself\\src\\2009517719856277802.jpg"); 45 // 图片随窗体大小而变化 46 g.drawImage(icon.getImage(), 0, 0, frame.getSize().width,frame.getSize().height,frame); 47 } 48 }; 49 JPanel panel1 = new JPanel(); 50 JPanel panel2 = new JPanel(); 51 JPanel panel3 = new JPanel(); 52 JPanel panel4 = new JPanel(); 53 panel2.setLayout(new GridLayout(2, 1)); 54 panel1.add(label2); 55 panel3.add(label3); 56 panel3.add(textfield1); 57 panel1.add(textfield2); 58 panel6.setLayout(new BorderLayout()); 59 // panel必须设置成透明 60 panel6.setOpaque(false); 61 // 改变字体颜色 62 label1.setForeground(Color.red); 63 panel6.add(label1); 64 panel4.add(button1); 65 panel4.add(button2); 66 panel4.add(button3); 67 panel2.add(panel1); 68 panel2.add(panel3); 69 frame.add(panel6, BorderLayout.NORTH); 70 frame.add(panel2, BorderLayout.CENTER); 71 frame.add(panel4, BorderLayout.SOUTH); 72 frame.setLocationRelativeTo(null); 73 frame.setSize(300, 250); 74 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 75 frame.setVisible(true); 76 frame.setResizable(true); 77 } 78 }

paint()方法与paintComponent()方法的区别:

awt控件中是在paint方法进行绘制, 所以在awt控件继承时,只要简单的覆盖paint方法就可以了。   
而在swing控件中,paint方法会依次调用paintcomponent, paintborder, paintchildren三个方法,后两者一般默认即可,所以swing编程时,如果继承jcomponent或者其子类,要覆盖paintcomponent而不是paint方法,这个在sun的教程中有说,jdk源程序中也可以很容易的看出来。

转自http://blog.sina.com.cn/s/blog_3e0ee44c0100fwsc.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM