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(),但它没有任何作用。