NetBeans IDE连接向导和属性受限的java bean

NetBeans IDE连接向导和属性受限的java bean,java,netbeans,javabeans,Java,Netbeans,Javabeans,我正在处理一个小bean示例,我正在尝试将一个具有受约束属性的bean连接到另一个bean。我不知道在NetBeans IDE连接向导中放什么,在java教程中找不到这种复杂性。有人知道该怎么做吗?我已尝试添加属性侦听器,但无法正确执行。下面我将向您展示我的源代码和侦听器bean //源BEAN import java.awt.Graphics; import java.io.Serializable; import javax.swing.JComponent; import java.a

我正在处理一个小bean示例,我正在尝试将一个具有受约束属性的bean连接到另一个bean。我不知道在NetBeans IDE连接向导中放什么,在java教程中找不到这种复杂性。有人知道该怎么做吗?我已尝试添加属性侦听器,但无法正确执行。下面我将向您展示我的源代码和侦听器bean

//源BEAN

import java.awt.Graphics; 
import java.io.Serializable; 
import javax.swing.JComponent;
import java.awt.Font;
import java.beans.*;

/**
 * Bean with a constrained property "counter".
 */
public class ConstrainedBean
        extends JComponent
        implements Serializable
{

    public int counter = 0;

    private PropertyChangeSupport pcs =
        new PropertyChangeSupport(this);
    private VetoableChangeSupport vcs =
        new VetoableChangeSupport(this);

    private String title;

    public int getInteger() {
        return counter;
    }


    public void setInteger(int i) throws PropertyVetoException {

        int old = this.counter;
        this.vcs.fireVetoableChange("counter", old, i);

        this.counter = i;
        this.pcs.firePropertyChange("counter", old, i);
    }

    public void
    addPropertyChangeListener(PropertyChangeListener listener) {
        pcs.addPropertyChangeListener(listener);
    }

    public void
    removePropertyChangeListener(PropertyChangeListener listener) {
        pcs.removePropertyChangeListener(listener);
    }

    public void
    addVetoableChangeListener(VetoableChangeListener listener) {
        vcs.addVetoableChangeListener(listener);
    }

    public void
    removeVetoableChangeListener(VetoableChangeListener listener) {
        vcs.removeVetoableChangeListener(listener);
    }


    protected void paintComponent( Graphics g )
    {
        this.title = Integer.toString(counter);

        g.setColor( getForeground() );

        int style = Font.PLAIN;

        int fontSize = 50;

        Font font = new Font ("Arial", style , fontSize);

        g.setFont(font);

        int height = g.getFontMetrics().getHeight();

        System.out.println(height);

        if ( this.title != null )
            g.drawString(this.title, 0, height );

       }
   }
//侦听器BEAN

import java.awt.Graphics;
import java.io.Serializable;
import javax.swing.JComponent;
import java.awt.Font;
import java.beans.*;
import java.beans.PropertyChangeEvent;
import java.beans.VetoableChangeListener;
import java.beans.PropertyVetoException;

/**
 * Bean with a simple property "counter".
 */
public class CounterBean
        extends JComponent
        implements Serializable
{

    public int counter = 0;

    public String title;

      public int getInteger() {
        return counter;
    }


    public void setInteger(int i) {
        counter = i;
    }

    public class VetoChangeListener implements VetoableChangeListener {

    public void vetoableChange(PropertyChangeEvent evt)
                        throws PropertyVetoException
    {

        Object oldc=evt.getOldValue();
        Object newc=evt.getNewValue();
        String s=evt.getPropertyName();

        int sourcecounter = ((Integer)newc).intValue();

        if ((sourcecounter <-5) | (sourcecounter >5))
        {throw new PropertyVetoException("out of bounds",evt);}
        else
        {counter=sourcecounter;}


    }

    }


    protected void paintComponent( Graphics g )
    {
        this.title = Integer.toString(counter);

        g.setColor( getForeground() );

        int style = Font.PLAIN;

        int fontSize = 25;

        Font font = new Font ("Arial", style , fontSize);

        g.setFont(font);

        int height = g.getFontMetrics().getHeight();

        System.out.println(height);

        if ( this.title != null )
            g.drawString(this.title, 0, height );

       }
   }
导入java.awt.Graphics;
导入java.io.Serializable;
导入javax.swing.JComponent;
导入java.awt.Font;
导入java.beans。*;
导入java.beans.PropertyChangeEvent;
导入java.beans.VetoableChangeListener;
导入java.beans.PropertyVetoException;
/**
*具有简单属性“counter”的Bean。
*/
公共类反bean
扩展JComponent
实现序列化接口
{
公共整数计数器=0;
公共字符串标题;
public int getInteger(){
返回计数器;
}
公共void setInteger(int i){
计数器=i;
}
公共类VetoChangeListener实现VetoableChangeListener{
公共作废否决权变更(PropertyChangeEvent evt)
抛出PropertyVetoException
{
对象oldc=evt.getOldValue();
对象newc=evt.getNewValue();
字符串s=evt.getPropertyName();
int sourcecounter=((整数)newc).intValue();
如果((源计数器5))
{抛出新的PropertyVetoException(“越界”,evt);}
其他的
{counter=sourcecounter;}
}
}
受保护组件(图形g)
{
this.title=Integer.toString(计数器);
g、 setColor(get前台());
int style=Font.PLAIN;
int fontSize=25;
Font Font=新字体(“Arial”、样式、字体大小);
g、 setFont(字体);
int height=g.getFontMetrics().getHeight();
系统输出打印LN(高度);
如果(this.title!=null)
g、 抽绳(此标题,0,高度);
}
}
//

任何帮助都将被感激地接受。这是最复杂的属性类型。
ps NetBeans 5.5.1

答案很简单。侦听器bean中的顶级类必须实现 VetoableChangeListener。在这种情况下,NetBeans连接向导中的选项将有意义。请注意,侦听器bean当前不显示其计数器 变量是正确的,但我怀疑重新绘制应该可以做到这一点。在我的设置中,“+1”和“-1” 按钮连接到源bean