Java PropertyEditor-如何强制重新绘制属性编辑器(paintValue)

Java PropertyEditor-如何强制重新绘制属性编辑器(paintValue),java,swing,propertyeditor,Java,Swing,Propertyeditor,我创建了一个属性编辑器: import ca.cmhc.ifm.portal.dataservice.dataobjects.location.Region; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Rectangle; import java.beans.PropertyEditorSupport; import java.util.ArrayList

我创建了一个属性编辑器:

import ca.cmhc.ifm.portal.dataservice.dataobjects.location.Region;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.beans.PropertyEditorSupport;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import org.openide.explorer.propertysheet.ExPropertyEditor;
import org.openide.explorer.propertysheet.PropertyEnv;

/**
 *
 * @author lbard
 */
public class MessagePropertyEditor extends PropertyEditorSupport implements ExPropertyEditor {

    private String localValue = "";
    private PropertyEnv env;
    private ArrayList<Region> regions;
    private String messageText = "";
    private JLabel renderer;

    public MessagePropertyEditor(String messageText) {
        super();
        this.messageText = messageText;
        renderer = new JLabel(this.messageText);
    }

    @Override
    public String getAsText() {
        return "";
    }


    @Override
    public boolean isPaintable() {
        return true;
    }

    @Override
    public void paintValue(final Graphics g, final Rectangle r)
    {
        renderer.setBorder(BorderFactory.createEmptyBorder(0, 3, 0, 0));
        renderer.setForeground(Color.blue);
        //renderer.setText("<html><i>" + this.messageText.replace("\n", " ") + "</i>");
        renderer.setText(this.messageText.replace("\n", " "));
        renderer.setBounds(r);
        renderer.paint(g);
    }

    @Override
    public Component getCustomEditor() {
        MessageCustomEditor panel = new MessageCustomEditor(messageText);
        return panel;
    }

    @Override
    public boolean supportsCustomEditor() {
        return true;
    }

    public void attachEnv(PropertyEnv env) {
        this.env = env;
    }
}
导入ca.cmhc.ifm.portal.dataservice.dataobjects.location.Region;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Graphics;
导入java.awt.Rectangle;
导入java.beans.PropertyEditorSupport;
导入java.util.ArrayList;
导入javax.swing.BorderFactory;
导入javax.swing.JLabel;
导入org.openide.explorer.propertysheet.ExPropertyEditor;
导入org.openide.explorer.propertysheet.PropertyEnv;
/**
*
*@lbard作者
*/
公共类MessagePropertyEditor扩展PropertyEditor支持实现ExpPropertyEditor{
私有字符串localValue=“”;
私人物业环境;
私有ArrayList区域;
私有字符串messageText=“”;
私有JLabel渲染器;
公共消息属性编辑器(字符串消息文本){
超级();
this.messageText=messageText;
renderer=newjlabel(this.messageText);
}
@凌驾
公共字符串getAsText(){
返回“”;
}
@凌驾
公共布尔值可绘制(){
返回true;
}
@凌驾
公共空白值(最终图形g、最终矩形r)
{
setboorder(BorderFactory.createEmptyByOrder(0,3,0,0));
渲染器。设置前景(颜色。蓝色);
//renderer.setText(“+this.messageText.replace(“\n”,”)+”);
renderer.setText(this.messageText.replace(“\n”,”);
1.立根(r);
1.油漆(g);
}
@凌驾
公共组件getCustomEditor(){
MessageCustomEditor面板=新建MessageCustomEditor(messageText);
返回面板;
}
@凌驾
公共布尔值支持scustomeditor(){
返回true;
}
公共空间附件(不动产环境){
this.env=env;
}
}
我试图找到一种方法来强制重新绘制这个组件。最终的目标是让计时器以特定的间隔改变背景颜色,使背景闪烁。
PropertyEditor
似乎没有“repait”或“invalidate”方法,所以我想知道如何让它重新绘制

我已尝试在用于创建图形的
JLabel
上无效/调用repaint,但它没有调用
paintValue()

我也尝试过直接调用该方法,但我不知道从何处获取所需的
图形
矩形

有人知道如何强制属性编辑器重新绘制吗


谢谢

是否要重新绘制属性编辑器,或在屏幕上表示属性编辑器的组件?在后一种情况下,请尝试
editor.getCustomEditor().repaint()

我可以想象这是通过
PropertyChangeListener
对我不了解的组件的支持实现的?如何使用PropertyChangeListener重新绘制PropertyEditor?我不是100%确定!但考虑到它是唯一可用的侦听器这一事实!触发PropertyChangeEvent可能会触发注册的侦听器更新其视图…嗯,我不确定。本质上,我希望我的paintValue覆盖触发(从而在大纲视图中重新绘制有问题的矩形)。我刚刚尝试了editor.getCustomEditor().repaint(),但它没有任何作用。