1. 程式人生 > >Swing之JTextField中新增圖片

Swing之JTextField中新增圖片

先看一張最終效果圖:

1、繼承來自JPasswordField的文字框

import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.ImageIcon;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/**
 *
 * @author WZH
 */
public class JTextFieldPassword extends JPasswordField {
    private ImageIcon icon;

    public JTextFieldPassword() {
//        獲取當前路徑下的圖片
        icon = new ImageIcon(getClass().getResource("./lock.png"));
        Insets insets = new Insets(0, 20, 0, 0);
        //設定文字輸入距左邊20
        this.setMargin(insets);
    }
    
    @Override
    public void paintComponent(Graphics g) {
        Insets insets = getInsets();
        super.paintComponent(g);
        int iconWidth = icon.getIconWidth();
        int iconHeight = icon.getIconHeight();
        int Height = this.getHeight();
        //在文字框中畫上之前圖片
        icon.paintIcon(this, g, (insets.left - iconWidth)/2, (Height - iconHeight) / 2);
    }
}
2、繼承來自JTextField的文字框
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.ImageIcon;
import javax.swing.JTextField;

/**
 *
 * @author WZH
 */
public class JTextFieldUser extends JTextField {
    private ImageIcon icon;

    public JTextFieldUser() {
        //獲取當前路徑下的圖片
        icon = new ImageIcon(getClass().getResource("./user.png"));
        Insets insets = new Insets(0, 20, 0, 0);
        //設定文字輸入距左邊20
        this.setMargin(insets);
    }
    
    @Override
    public void paintComponent(Graphics g) {
        Insets insets = getInsets();
        super.paintComponent(g);
        int iconWidth = icon.getIconWidth();
        int iconHeight = icon.getIconHeight();
        int Height = this.getHeight();
        //在文字框中畫上之前圖片
        icon.paintIcon(this, g, (insets.left - iconWidth)/2, (Height - iconHeight) / 2);
    }
}

在文字框中新增圖片的方法主要就在重寫JtextField的paintComponent(Graphics g)方法,先將圖片繪製在文字框中,這裡應該注意的是super.paintComponent(g)方法應該在圖片繪製前呼叫,否則會出現圖片未繪上後被清除的情況。