Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Swing中使用Bean Binding实例

最近在做一个Java Swing的小程序,试了一下Bean Binding,需要用到的lib有两个,appframework-1.03.jar和beanbind-1.2.1.jar. 完整代码如下:Entrance.javapackage main;import swing.MainFrame;public class Entrance {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  MainFrame mf = new MainFrame();
  mf.setup();
 }
}Entity.javapackage bean;import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;public class Entity {
 private String inputtext; private PropertyChangeSupport changeSupport=new PropertyChangeSupport(this);
 public String getInputtext() {
  return inputtext;
 } public void setInputtext(String inputtext) {
  String oldText=this.inputtext;
  this.inputtext = inputtext;
  changeSupport.firePropertyChange("inputtext", oldText, inputtext);
 
 } public void addPropertyChangeListener(PropertyChangeListener listener){
  changeSupport.addPropertyChangeListener(listener);
 }
 
 public void removePropertyChangeListener(PropertyChangeListener listener){
  changeSupport.removePropertyChangeListener(listener);
 }
}MainFrame.javapackage swing;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JFrame;
public class MainFrame {
     private JFrame frame;
     public void setup(){
        frame=new JFrame();
         frame.setPreferredSize(new Dimension(600,400));
         frame.getContentPane().add(new MainWindow().createPanel(),BorderLayout.CENTER);
         frame.setVisible(true);
         frame.addWindowListener(new windowEventHandler());
     }
     class windowEventHandler extends WindowAdapter{
       public void windowClosing(WindowEvent e){
      System.out.println("Exit"); 
          System.exit(0);
       }
        }
}
 MainWindow.javapackage swing;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;import org.jdesktop.beansbinding.AutoBinding;
import org.jdesktop.beansbinding.BeanProperty;
import org.jdesktop.beansbinding.Bindings;
import org.jdesktop.beansbinding.AutoBinding.UpdateStrategy;import bean.Entity;public class MainWindow implements ActionListener {
 private JPanel mainPanel;
 private JTextField textField;
 private JButton button;
 public final static Entity entity = new Entity(); public JPanel createPanel() {
  mainPanel = new JPanel();
  mainPanel.setLayout(new BorderLayout());
  mainPanel.setPreferredSize(new Dimension(300, 200));
  textField = new JTextField();  BeanProperty<Entity, String> inputtextProperty = BeanProperty
    .create("inputtext");
  BeanProperty<JTextField, String> textProperty = BeanProperty
    .create("text");  /* From java bean to swing component */
 AutoBinding<Entity, String, JTextField, String>
 binding1=Bindings.createAutoBinding(UpdateStrategy.READ_WRITE,
 entity, inputtextProperty, textField, textProperty);  /* From swing component to java bean */
  //AutoBinding<MyTextField, String, Entity, String> binding2 = Bindings
  //  .createAutoBinding(UpdateStrategy.READ_WRITE, textField,
  //    textProperty, entity, inputtextProperty);
  binding1.bind();
  //binding2.bind();
  mainPanel.add(textField, BorderLayout.CENTER);
  button = new JButton("Change Text");
  button.addActionListener(this);  mainPanel.add(button, BorderLayout.SOUTH);
  return mainPanel;
 } @Override
 public void actionPerformed(ActionEvent e) {
  // TODO Auto-generated method stub
  if (e.getSource() == button) {
   /* From java bean to swing component */
    entity.setInputtext("Hello");
    System.out.println("entity value: "+entity.getInputtext());
    System.out.println("component value: "+textField.getText());
    mainPanel.updateUI();   /* From swing component to java bean */
   //System.out.println("component value: " + textField.getText());
   //System.out.println("entity value: " + entity.getInputtext());
  }
 }
}说明:上述代码只实现了修改java bean中attribute中的值能够自动在swing component中通过beanbinding显示出来,反过来并不成立,如果有大虾知道如何通过修改component的属性值从而自动修改bean中的属性值,还请指教。Java Swing中的透明窗体(Windows中消息提示框的制作) http://www.linuxidc.com/Linux/2014-04/99622.htm用Java Swing编写简单的测试小工具界面(源码) http://www.linuxidc.com/Linux/2012-11/73566.htmJava 学习之 Swing 编程 http://www.linuxidc.com/Linux/2014-05/101049.htm本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-11/109187.htm