An indexed property is an array of properties or objects that supports a range of values and enables the accessor to specify an element of a property to read or write.
Indexed properties are specified by the following methods:
//Methods to access individual values public PropertyElement getPropertyName(int index) public void setPropertyName(int index, PropertyElement element)
//Methods to access the entire indexed property array public PropertyElement[] getPropertyName() public void setPropertyName(PropertyElement element[])
get
and set
methods for
indexed properties is subtle. The get
method either has an
argument that is the array index of the property, or returns an array.
The set
method either has two arguments,
namely an integer array index and the property element object that is being set,
or has the entire array as an argument.
MyBean
component, right-click the Bean
Patterns node and select Add|Indexed Property from the pop-up menu. Set up
Non-Index Options as shown in the following figure.
The code in the Source window will be changed automatically as follows:
import java.awt.Graphics; import java.io.Serializable; import javax.swing.JComponent; /** * Bean with simple property 'title'. */ public class MyBean extends JComponent implements Serializable { private String title; public String getTitle() { return this.title; } public void setTitle( String title ) { this.title = title; } protected void paintComponent( Graphics g ) { g.setColor( getForeground() ); int height = g.getFontMetrics().getHeight(); if ( this.title != null ) g.drawString(this.title, 0, height ); } /** * Holds value of property lines. */ private String[] lines; /** * Indexed getter for property lines. * @param index Index of the property. * @return Value of the property at index. */ public String getLines(int index) { return this.lines[index]; } /** * Getter for property lines. * @return Value of property lines. */ public String[] getLines() { return this.lines; } /** * Indexed setter for property lines. * @param index Index of the property. * @param lines New value of the property at index. */ public void setLines(int index, String lines) { this.lines[index] = lines; } /** * Setter for property lines. * @param lines New value of property lines. */ public void setLines(String[] lines) { this.lines = lines; } }
MyBean.java
component to present the user with a
list of choices. You can provide and change these choices at design time. (Newly
added code is shown in bold.)
import java.awt.Graphics; import java.io.Serializable; import javax.swing.JComponent; /** * Bean with a simple property "title" * and an indexed property "lines". */ public class MyBean extends JComponent implements Serializable { private String title; private String[] lines = new String[10]; public String getTitle() { return this.title; } public void setTitle( String title ) { this.title = title; } public String[] getLines() { return this.lines.clone(); } public String getLines( int index ) { return this.lines[index]; } public void setLines( String[] lines ) { this.lines = lines; } public void setLines( int index, String line ) { this.lines[index] = line; } protected void paintComponent( Graphics g ) { g.setColor( getForeground() ); int height = g.getFontMetrics().getHeight(); paintString( g, this.title, height ); if ( this.lines != null ) { int step = height; for ( String line : this.lines ) paintString( g, line, height += step ); } } private void paintString( Graphics g, String str, int height ) { if ( str != null ) g.drawString( str, 0, height ); } }
The following figure represents the lines property in the Properties window.
Notice that this property has a null value. To set up an alternative value,
press the "..." button. The form shown in the following figure enables you to
add ten items for the lines
property list. First remove the default null items.
Then add custom items to the list by entering each item value into the Item
field and pressing the Add button each time.