說到JTextField,與之相類似的還有JPasswordField和JFormatTextField,JPasswardField大家很熟悉,就是密碼框,輸入的字元串不是以正常形式顯示的,而是以帶星号的字元串顯示。JFormatTextField呢,簡而言之,就是需要預先定義他的參數的一種JTextField。舉個例子,如果在一個面闆中,如果分别添加一個JTextField個一個JFormatTextField,當在這裡面設定預設顯示的字元串時,JTextField可以完全顯示,而JFormatTextField則是不會顯示的,需要設定setColumns()這個屬性來達到顯示的效果。
上面說了那麼多,來我們來轉入正題,怎麼來美化一個JTextField?
說到這裡,來說明一下paint()方法,paintComponent()方法的差別。咋一看,有很多人覺得這兩個方法是一樣,paintComponent()也可以繪制,而paint()也可以繪制,其實不然,paint()方法完成以後,還會通過paintComponent()方法來繪制它的Border,也就是很多元件的setBorder()。說到這裡,你可能就會恍然大悟,對于大部分元件,如果僅僅隻是邊框太難看,我們大可不必重繪該元件,而僅僅隻需要自定義一個border就可以啦

!!!
JTextField,JPasswordField,JFormatTextField這幾個也不列外,現在來自定義它們的border。
下面是代碼:
public class MyTextFieldBorder extends AbstractBorder{
private static final Color BACKGROUND01=new Color(0,30,255);
public MusicTextFieldBorder(){
}
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2d=(Graphics2D) g;
g2d.setStroke(new BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f));
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(BACKGROUND01);
g2d.drawRoundRect(0, 0, c.getWidth()-4,c.getHeight()-4, 20, 20);
}
public Insets getBorderInsets(Component c) {
return new Insets(0, 10, 0, 0);
}
}
通過自定義border後,我們再設定border,比如
JTextField text=new JTextField();
text.setborder(new myTextFieldBorder());
下面是效果圖
怎麼樣?是不是很好看,别忘了設定間距setmargin(),就是光标的縮進距離。這裡再說明一下,如果你就通過paint()方法來繪制的那麼此方法,可能不會奏效,因為很簡單,border是paintComponent是後面加進去的,先paint成這樣,就無法設定間距哦!!!
這點一定要記住。