2012-03-15 15 views
0

小さなbeanの例で作業しています。制約付きプロパティを持つBeanを2番目のBeanに接続しようとしています。私はNetBeans IDE接続ウィザードに何を入れるべきか分かりませんし、Javaチュートリアルではこの複雑さを見つけることができません。誰かが何をすべきか知っていますか?プロパティリスナーを追加しようとしましたが、それを正しく取得できません。私はあなたのソースとリスナーの豆を以下に示します。NetBeans IDE接続ウィザードと制限付きプロパティを持つJava Beam

// SOURCE 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); 

     } 
    } 

// LISTENER 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); 

     } 
    } 

//

すべてのヘルプは感謝して受け入れられます。これは、プロパティタイプの中で最も複雑です。 ps NetBeans 5.5.1!

答えて

0

これに対する答えは簡単です。リスナーBeanの最上位クラスは、 VetoableChangeListenerを実装する必要があります。この場合、NetBeans接続ウィザードのオプションが有効です。リスナーBeanは現在、カウンター の変数を正しく表示していませんが、私は再描画でそのトリックを行うべきだと考えています。私の設定では、 "+1"と "-1" ボタンがソースBeanに接続されています。

関連する問題