Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[ve-dev] Adding extended JPanel to VE with BeanInfo and problem with location property

I am developing some beans, and I need them to be able for the user to set the 'location' property. Besides, it has to be possible to change the name displayed in the properties editor in different languages.

 I have created a class MyBeanBeanInfo extending SimpleBeanInfo, and in the method getPropertyDescriptors() I have tried two options:

 1) I have created my own 'location' property, setting its DisplayName. With this option the property is shown correctly in the property editor by the visual editor, and its values are automatically refreshed when the user moves the bean in the design editor, because they change the setBounds sentence in the code, and the getLocation method (which calls to getBounds) is called automatically to get the value of the property after every movement.

 But as soon as I set the value by changing it in the property editor (rather than moving it with the mouse), a line with the 'setLocation' sentence is written in the generated code file, and after that the movements of the bean with the mouse in design editor have no effect. This is because in every movement the setBounds sentence is changed, but now the visual editor does not call to the getLocation method to change the values in the property editor, and rather uses the values written in the sentence within the code. When the bean code is executed, the sentence setLocation is used after the setBounds, returning the bean to its original position.

 2) I have observed that when I use a JPanel (without BeanInfo file), it does not happen the effect described above. When I set location property in the property editor, visual editor REPLACES the setBound sentence with one setSize sentence and one setLocation sentence !! After that, changes of position in the design editor change the setLocation an setSize sentences (instead of setBounds). So I tried to use the 'location' property from the JPanel as all my beans inherit from it.

 I use the Introspector to get the PropertyDescriptor from the java.awt.Component class for the 'location' property, and return it with the rest of my properties. It worked fine, changing the setBounds sentence by both setSize and setLocation, but I have a problem: it does not accept changes in the display name, and it is always shown 'location'.

I use Eclipse 3.1.1 with Visual Editor 1.1.0

Could anyone help me?


Example:

import javax.swing.JPanel;

public class MyBean extends JPanel{

    public MyBean() {
        super();
    }
}

import java.beans.*;
public class MyBeanBeanInfo extends SimpleBeanInfo {

    public PropertyDescriptor[] getPropertyDescriptors() {
        PropertyDescriptor[] props = new PropertyDescriptor[1];
       
        PropertyDescriptor propDesc = new PropertyDescriptor(location, MyBean.class);
        propDesc.setDisplayName("posicion");
       
        props[0]=propDesc;
       
        return props;
    }
}



Back to the top