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

时间:2014-01-06 19:48:21

标签: 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 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;
    }
}

我正试图找到一种强制重新绘制此组件的方法。最后的目标是让计时器以特定的间隔改变背景颜色,使背景闪烁。 PropertyEditor似乎没有“重绘”或“无效”方法,因此我想知道如何重新绘制它。

我试图在用于创建图形的JLabel上无效/调用重绘,但它不会调用paintValue()

我也试图直接调用该方法,但我不知道从哪里获取GraphicsRectangle作为参数......

任何人都知道如何强制PropertyEditor重绘?

由于

1 个答案:

答案 0 :(得分:0)

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