Java 如何将自定义JTextField影响作为默认值应用,并对每个状态具有不同的影响?
我正在为我的程序使用Nimbus LAF,并创建了一个具有圆形边框、着色等的自定义JTextField,我对此非常满意,但是我希望能够将影响设置为默认值,这样我就不必将其应用于每个JTextField。我不介意将其应用到每个领域。我主要关心的是,我希望能够对每个状态产生不同的影响(即:聚焦、非聚焦、禁用、启用等)。下面是我目前用于实现单个自定义更改的代码。是否仍然可以将其作为默认值应用,更重要的是,我是否可以将其作为默认值应用于JTextField的不同状态Java 如何将自定义JTextField影响作为默认值应用,并对每个状态具有不同的影响?,java,swing,jtextfield,Java,Swing,Jtextfield,我正在为我的程序使用Nimbus LAF,并创建了一个具有圆形边框、着色等的自定义JTextField,我对此非常满意,但是我希望能够将影响设置为默认值,这样我就不必将其应用于每个JTextField。我不介意将其应用到每个领域。我主要关心的是,我希望能够对每个状态产生不同的影响(即:聚焦、非聚焦、禁用、启用等)。下面是我目前用于实现单个自定义更改的代码。是否仍然可以将其作为默认值应用,更重要的是,我是否可以将其作为默认值应用于JTextField的不同状态 public class Round
public class RoundJTextField extends BasicTextFieldUI {
private int round = 5;
private int shadeWidth = 2;
private int textSpacing = 3;
public void installUI ( JComponent c )
{
super.installUI ( c );
c.setOpaque ( false );
int s = shadeWidth + 1 + textSpacing;
c.setBorder ( BorderFactory.createEmptyBorder ( s, s, s, s ) );
}
protected void paintSafely ( Graphics g )
{
Graphics2D g2d = ( Graphics2D ) g;
g2d.setRenderingHint ( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON );
Shape border = getBorderShape ();
Stroke os = g2d.getStroke ();
g2d.setStroke ( new BasicStroke ( shadeWidth * 2 ) );
g2d.setPaint ( new Color(220,220,220) );
g2d.draw ( border );
g2d.setStroke ( os );
g2d.setPaint ( new Color(176,176,176) );
g2d.fill ( border );
g2d.setPaint ( new Color(0,0,0) );
g2d.draw ( border );
super.paintSafely ( g );
}
private Shape getBorderShape ()
{
JTextComponent component = getComponent ();
if ( round > 0 )
{
return new RoundRectangle2D.Double ( shadeWidth, shadeWidth,
component.getWidth () - shadeWidth * 2 - 1,
component.getHeight () - shadeWidth * 2 - 1, round * 2, round * 2 );
}
else
{
return new Rectangle2D.Double ( shadeWidth, shadeWidth,
component.getWidth () - shadeWidth * 2 - 1,
component.getHeight () - shadeWidth * 2 - 1 );
}
}
}
当前要设置我使用的JTextField,请执行以下操作:
snTF = new JTextField(tfW);
snTF.setUI(new RoundJTextField());
非常感谢您的帮助。您可以创建一个扩展
JTextField
的类,并在构造函数中调用当前调用的方法来设置当前JTextField
的UI,然后不创建JTextField
s,只需创建默认具有自定义效果的MyJTextField
s即可。如果使用Nimbus,则可以实现Painter
界面()。然后,可以将自定义绘制者指定给UIDefaults
类中的属性(从UIManager.getDefaults()
获取)。例如,要在JTextField上移动鼠标时更改其边框,请将TextField[MouseOver].borderPainter
属性设置为您自己的Painter
。当鼠标位于文本字段上方时,Nimbus外观将委托您的画师绘制边框
资料来源:(从第27页起)