我正在使用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
答案 0 :(得分:0)
Swing框架不支持数据绑定或开箱即用的验证。因此,SwingMetawidget也没有。
但是,您可以使用各种第三方框架扩充 Swing,例如BeansBinding,Commons BeansUtils,JGoodies Validator或Commons Validator。因此,您可以为每种技术应用Metawidget插件。
您已经在应用BeansBinding第三方插件,因此您的绑定可以正常工作。
您还需要应用其中一个验证程序插件。 Metawidget直接支持JGoodies Validator,Commons Validator,oVal和Hibernate Validator。选择适合您现有架构的产品。或者你可以推出自己的WidgetProcessor。