Swing——JTextField美化

说到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成这样,就无法设置间距哦!!!这点一定要记住。

你可能感兴趣的:(JAVA组件美化)