天天看點

Swing——JTextField美化

說到JTextField,與之相類似的還有JPasswordField和JFormatTextField,JPasswardField大家很熟悉,就是密碼框,輸入的字元串不是以正常形式顯示的,而是以帶星号的字元串顯示。JFormatTextField呢,簡而言之,就是需要預先定義他的參數的一種JTextField。舉個例子,如果在一個面闆中,如果分别添加一個JTextField個一個JFormatTextField,當在這裡面設定預設顯示的字元串時,JTextField可以完全顯示,而JFormatTextField則是不會顯示的,需要設定setColumns()這個屬性來達到顯示的效果。

上面說了那麼多,來我們來轉入正題,怎麼來美化一個JTextField?

說到這裡,來說明一下paint()方法,paintComponent()方法的差別。咋一看,有很多人覺得這兩個方法是一樣,paintComponent()也可以繪制,而paint()也可以繪制,其實不然,paint()方法完成以後,還會通過paintComponent()方法來繪制它的Border,也就是很多元件的setBorder()。說到這裡,你可能就會恍然大悟,對于大部分元件,如果僅僅隻是邊框太難看,我們大可不必重繪該元件,而僅僅隻需要自定義一個border就可以啦

Swing——JTextField美化

!!!

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());

下面是效果圖

Swing——JTextField美化

怎麼樣?是不是很好看,别忘了設定間距setmargin(),就是光标的縮進距離。這裡再說明一下,如果你就通過paint()方法來繪制的那麼此方法,可能不會奏效,因為很簡單,border是paintComponent是後面加進去的,先paint成這樣,就無法設定間距哦!!!

Swing——JTextField美化

這點一定要記住。

繼續閱讀