简体   繁体   中英

customized textfieldUI look&feel

Code below allows to change default TextFieldUI to allow you to have hints shown on the JTextField. The problem I'm having is, I'm using nimbus look and feel for my program and when I change this textfieldUI, everything works fine, as it should, but textfield look and feel changes to ugly looking one. I think, since I'm overriding defaults I should set look and feel in this code manually, but just don't know how to do it!

import java.awt.Color;
java.awt.Graphics;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.plaf.basic.BasicTextFieldUI;
import javax.swing.text.JTextComponent;

public class HintTextFieldUI extends BasicTextFieldUI implements FocusListener {

private String hint;
private boolean hideOnFocus;
private Color color;

public Color getColor() {
    return color;
}

public void setColor(Color color) {
    this.color = color;
    repaint();
}

private void repaint() {
    if(getComponent() != null) {
        getComponent().repaint();           
    }
}

public boolean isHideOnFocus() {
    return hideOnFocus;
}

public void setHideOnFocus(boolean hideOnFocus) {
    this.hideOnFocus = hideOnFocus;
    repaint();
}

public String getHint() {
    return hint;
}

public void setHint(String hint) {
    this.hint = hint;
    repaint();
}
public HintTextFieldUI(String hint) {
    this(hint,false);
}

public HintTextFieldUI(String hint, boolean hideOnFocus) {
    this(hint,hideOnFocus, null);
}

public HintTextFieldUI(String hint, boolean hideOnFocus, Color color) {
    this.hint = hint;
    this.hideOnFocus = hideOnFocus;
    this.color = color;
}

@Override
protected void paintSafely(Graphics g) {
    super.paintSafely(g);
    JTextComponent comp = getComponent();
    comp.setu
    if(hint!=null && comp.getText().length() == 0 && (!(hideOnFocus && comp.hasFocus()))){
        if(color != null) {
            g.setColor(color);
        } else {
            g.setColor(comp.getForeground().brighter().brighter().brighter());              
        }
        int padding = (comp.getHeight() - comp.getFont().getSize())/2;
        g.drawString(hint, 2, comp.getHeight()-padding-1);          
    }
}

@Override
protected void installListeners() {
    super.installListeners();
    getComponent().addFocusListener(this);
}
@Override
protected void uninstallListeners() {
    super.uninstallListeners();
    getComponent().removeFocusListener(this);
}

public void focusGained(FocusEvent e) {
    // TODO Auto-generated method stub
    if(hideOnFocus) repaint();
}

public void focusLost(FocusEvent e) {
    // TODO Auto-generated method stub
    if(hideOnFocus) repaint();  
}

}

我不知道雨云的风格是什么,但也许文本提示会为您工作。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM