NetBeans初学之三

今天学习了下JavaBean的属性,JavaBean都具有属性、事件和方法三大特性,JavaBean数学包括:Sample属性,Indexed属性、Bound属性和Constrained属性。创建简单的属性,如name属性呀,在初学一中有介绍,而且作为bena的属性是可以更改其内容的。

1、创建简单的属性编辑器

创建一个标准的javaBean,要先创建一个标准的java项目,再创建一个包名:mybeans

接着就是在包中,创建其他,一个java类

在这个java类中输入下面的代码

package mybeans;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.beans.*;
import java.io.Serializable;
/**
 *
 * @author Administrator
 */
public class FirstLabel extends Component implements Serializable {
    public static final String PROP_TEXT = "text";
    private String text = "MyLabel1";
    private PropertyChangeSupport propertySupport;
    public FirstLabel() {
        propertySupport = new PropertyChangeSupport(this);
        this.setPreferredSize(new Dimension(60, 30));
    }
    public String getText(){
        return text;
    }

    public void setText(String value){
        String OldValue = text;
        text = value;
        propertySupport.firePropertyChange(PROP_TEXT,OldValue,text);
    }
   public void addPropertyChangeListener(PropertyChangeListener listener){
    propertySupport.addPropertyChangeListener(listener);
   }

   public void removePropertyChangeListener(PropertyChangeListener listener){
    propertySupport.removePropertyChangeListener(listener);
   }
    public void paint(Graphics g){
        if(text != null && text != " "){
            g.drawString(text,0,getHeight()-5);
        }
    }

  }
这样,这个bean组件就建成了,只要再运行下这个项目(即编译后才能被其他所调用),工具--》添加到组件面板--》Bean即可
这样,在新建一个使用该bean的类,这里,建立一个 ,同初学一中的使用一样,建立一个JFrame窗体,再右击添加面板,把上述建立的bean添加进去即可。这样,可以修改这个bean的text属性的。、
注:总是会出现一些小问题,然后右击格式化代码突然又可以了,也许是一些小的错误很难检查出来吧,也有可能是NetBeans的bug吧!
2、在“属性”窗口中实现下拉列表框
2.1 创建shape组件 在这个项目中新建一个myshape的包,在该包中再建立一个MyShape的类
代码为:
package myshape;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.beans.*;
import java.io.Serializable;
/**
 *
 * @author Administrator
 */
public class MyShape extends Component implements Serializable {
    public static final String PROP_SHAPE = "shape";
    private String shape = "Rectangle";
    private PropertyChangeSupport propertySupport;
    public MyShape() {
        propertySupport = new PropertyChangeSupport(this);
        this.setPreferredSize(new Dimension(50, 50));
    }
    public String getShape() {
        return shape;
    }
    public void setShape(String value) {
        String oldValue = shape;
        shape = value;
        propertySupport.firePropertyChange(PROP_SHAPE, oldValue, shape);
    }
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.addPropertyChangeListener(listener);
    }
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertySupport.removePropertyChangeListener(listener);
    }
    public void paint(Graphics g) {
        int w = getWidth();
        int h = getHeight();
        if (shape == "Round Retangle") {
            g.drawRoundRect(0,0,w-1,h-1,30,30);
             } else if(shape == "Oval") {
                g.drawOval(0, 0, w-1, h-1);
                } else if (shape == "Arc"){
                    g.drawArc(0,0,w-1,h-1,0,180);
                } else {
                    g.drawRect(0, 0, w-1, h-1);
                }
    }
}
 
 
2.2 再在这个包中新建一个属性编辑器的类:
代码如下:
package myshape;
import java.beans.PropertyEditorSupport;
/**
 *
 * @author Administrator
 */
//帮助构建属性编辑器的支持类
public class ShapePropertyEditor extends PropertyEditorSupport{
    //getTags()返回属性的全部可选值
    public String[] getTags(){
        String shapes[] = {
        "Rectangle","Round Rectangle","oval","Arc"
        };
        return shapes;
    }
    /*在产生代码及设置属性值时被使用,返回当前属性值的java代码,
     引号是让属性值作为字符串处理
    */
     public String getJavaInitializationString(){
        return "/""+getAsText()+"/"";
    }
    //返回当前属性值的字符串形式
    public String getAsText(){
    return (String) super.getValue();
    }
    //用于以字符串的形式设置属性值 这里string是一个字符串型,不用转换
    public void setAsText(String string) throws IllegalArgumentException{
        super.setValue(string);
   }
}
2.3 将属性和属性编辑器关联
有两种方法来关联
一、通过PropertyEditorManager进行关联
PropertyEditorManager可以查找任何给定类型名称的属性编辑器,此属性必须支持java.beans.PropertyEditor接口,以编辑给定对象,
二、通过BeanInfo进行关联
在这个包里新建一个类
代码:
package myshape;
import java.beans.BeanDescriptor;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.beans.SimpleBeanInfo;
import myshape.*;
/**
 *
 * @author Administrator
 */
public class MyShapeBeanInfo extends SimpleBeanInfo {
    private final static Class beanClass = MyShape.class;
    public BeanDescriptor getBeanDescriptor() {
        BeanDescriptor bd = new BeanDescriptor(beanClass);
        bd.setDisplayName("MyShapeBean");
        return bd;
    }
    public PropertyDescriptor[] getPropertyDescriptors(){
      try{
          PropertyDescriptor textPD = new PropertyDescriptor("shape",beanClass);
          //为属性shape指定了属性编辑器ShapePropertyEdiotr,
          //并生成一个property descriptor数组
        textPD.setPropertyEditorClass(ShapePropertyEditor.class);
        PropertyDescriptor rv[] = { textPD };
        return rv;
         } catch(IntrospectionException e) {
            throw new Error(e.toString());
         }
    }
}
这样,属性shape和属性编辑器ShapePropertyEdiotr关联起来了,把这个Bean添加到窗体上,可以显示
即建立一个测试的,新建一个Swing gui窗体,jpanel窗体
就可以显示
如下:
 
 
随着上面该bean的属性shape变化,那么显示出来的图形也随之而改变。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值