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