UI验证无法在Swing MetaWidget中使用

时间:2016-08-18 15:24:53

标签: java swing metawidget

我正在使用MetaWidget进行Swing。我能够生成UI,BeanBinding也可以正常工作。但是,强制字段和最大长度等验证不起作用。我期待savePerson()方法中的第一行在我将“First Name”字段留空时抛出异常。 你能帮忙吗?我缺少一个Jar文件吗?我的代码中是否缺少某些内容?

主要用户界面

public class MetaWidgetFrame extends JFrame {

    private JPanel contentPane;
    private SwingMetawidget metawidget = new SwingMetawidget();


    /**
     * Create the frame.
     */
    public MetaWidgetFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel contentPanel = new JPanel();
        contentPane.add(contentPanel, BorderLayout.CENTER);

        JPanel controlsPanel = new JPanel();
        contentPanel.setLayout(new BorderLayout(0, 0));

        contentPane.add(controlsPanel, BorderLayout.SOUTH);

        JButton btnSave = new JButton("Save");
        btnSave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                savePerson();
            }
        });
        controlsPanel.add(btnSave);

        Person person = new Person();
        person.setUserID(new Integer(1));
        person.setFirstName("Raman");
        person.setLastName("C V");

        CompositeInspectorConfig inspectorConfig = new CompositeInspectorConfig().setInspectors(
                  new JpaInspector()
                , new PropertyTypeInspector()
                );

        BeansBindingProcessor bbp = new BeansBindingProcessor();


        metawidget.setInspector( new CompositeInspector( inspectorConfig ) );
        metawidget.addWidgetProcessor(new ReflectionBindingProcessor());
        metawidget.addWidgetProcessor(bbp);
        metawidget.setToInspect(person);

        contentPanel.add(metawidget, BorderLayout.CENTER);
        pack();
    }

    public void savePerson() {
        metawidget.getWidgetProcessor(BeansBindingProcessor.class).save(metawidget );
        Person personSaved = metawidget.getToInspect();
        System.out.println("" + personSaved);
    }
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MetaWidgetFrame frame = new MetaWidgetFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

实体类

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "person", catalog = "mydb")
public class Person {

    private Integer userID;
    private String firstName;
    private String lastName;

    public Person() {
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)

    @Column(name = "userID", unique = true, nullable = false)
    public Integer getUserID() {
        return userID;
    }

    @Column(name = "firstName", nullable = false, length = 10)
    public String getFirstName() {
        return firstName;
    }

    @Column(name = "lastName", nullable = false, length = 45)
    public String getLastName() {
        return lastName;
    }

    public void setUserID(Integer userID) {
        this.userID = userID;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return "Person: "
                + "\n userID = " + userID  
                + "\n firstName = " + firstName  
                + "\n lastName = " + lastName;
    }
}

屏幕:

The Screen with First name Blanked Out

控制台输出:

Person: 
 userID = 1
 firstName = 
 lastName = C V

1 个答案:

答案 0 :(得分:0)

Swing框架不支持数据绑定或开箱即用的验证。因此,SwingMetawidget也没有。

但是,您可以使用各种第三方框架扩充 Swing,例如BeansBinding,Commons BeansUtils,JGoodies Validator或Commons Validator。因此,您可以为每种技术应用Metawidget插件。

您已经在应用BeansBinding第三方插件,因此您的绑定可以正常工作。

您还需要应用其中一个验证程序插件。 Metawidget直接支持JGoodies Validator,Commons Validator,oVal和Hibernate Validator。选择适合您现有架构的产品。或者你可以推出自己的WidgetProcessor。