рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рд╕реНрд╡рд┐рдВрдЧ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдлреЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдИ рдЬрд╛рдПред рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдХреИрд╕реЗ рдЖрдпрд╛ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрдИ рдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рд╕реНрд╡рд┐рдВрдЧ-рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкрд╛рджрди рдЬрд╛рд╡рд╛-рдмреАрдиреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВред JDK рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реИ, рдФрд░ "рдЖрдЙрдЯ рдСрдл рдж рдмреЙрдХреНрд╕" рдРрд╕рд╛ рдХреБрдЫ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
GridBagPanel panel = new GridBagPanel(){{ add( new JLabel( "Name" ), 0, 0 ); add( new JTextField( person.getName() ) {{ getDocument().addDocumentListener( new DocumentListener() { public void insertUpdate( final DocumentEvent e ) { person.setName( getText() ); } public void removeUpdate( final DocumentEvent e ) { person.setName( getText() ); } public void changedUpdate( final DocumentEvent e ) { person.setName( getText() ); } } ); }}, 0, 1 );
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдХреЛрдб рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред
- рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рд░реВрдкреЛрдВ рдХрд╛ "рдЪрд┐рддреНрд░"ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрдмреАрдиреНрд╕ рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдмрдирд╛рдиреЗ рдФрд░ java.beans рдкреИрдХреЗрдЬ рдХреЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЖрдкрдХреА рд╕реЗрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЧреНрд░рд╛рдлрд┐рдХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рднреА рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕рднреА рдХреЛрдб рдореЗрдВ рдмреНрд▓реЛрдЯрд┐рдВрдЧ рдФрд░ рдЕрдкрдардиреАрдп рдмрдирдиреЗ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИред рдкреНрд░рдкрддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╣реИ ред - рдЪрд┐рдВрддрдирд╢реАрд▓ рдлрд╛рд░реНрдо рдкреАрдврд╝реА рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЬреИрд╕реЗ рдХрд┐ JGoodies ( рдпрд╣рд╛рдВ рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ) рдФрд░ рдореЗрдЯрд╛рд╡рд┐рдЬреЗрдЯ ( рдпрд╣рд╛рдВ рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ )ред
рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдмрдВрдзрди рдмрд┐рди рдЧреБрдгреЛрдВ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдореЛрдВ рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдмрдВрдзрди рдХреА рд╢реБрджреНрдзрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрдЯрд╛рд╡рд┐рдЬрдЯ рдореЗрдВ, рдШрдЯрдХреЛрдВ рдХрд╛ рд╕реНрдерд╛рди рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ XML, рд╕реАрдзреЗ рдкреИрдирд▓ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдпред
рдпрд╣ рдореЗрдЯрд╛рд╡рд┐рдЯрдЧ рдореЗрдВ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рдкреИрдирд▓реЛрдВ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рдкреЗрдЯрдирд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдлреНрд░реЗрдо рдХреЛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд╕ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореИрдВрдиреЗ рдлреЙрд░реНрдо рдЬреЗрдирд░реЗрд╢рди рдХреА рдПрдХ рдиреНрдпреВрдирддрдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдЖрдкрдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
- рдХреЛрдб рдХреА рдПрдХ рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рдмрдирд╛рдирд╛
- рдкреИрдирд▓ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдВрддреНрд░рдг, рдЬреИрд╕реЗ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдШрдЯрдХ рд╣реИрдВ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реЗрдо рдХреЗ рдЧреБрдгреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
- рд╕рддреНрдпрд╛рдкрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг; рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ
- рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ
- рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рд╣рдо рдПрдХ рд╡рд░реНрдЧ рджреЗрддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рдлреЙрд░реНрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
Form<Person> form = FormBuilder.map( Person.class ).buildForm(); myFrame.add( form.asComponent() ); Person person = new Person(); person.setName( "john smith" );
рдШрдЯрдХ рд╕реНрдерд╛рди
рд╕рдВрднрд╡рддрдГ, 80% рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 2 рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдПрдХ рдирд╛рдо рдФрд░ рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдмрд▓ред рдХреНрд▓рд╛рд╕рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╣реИ: рд╣рдо рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо рдкреВрдЫрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдШрдЯрдХ рдорд┐рд▓рддрд╛ рд╣реИред
Form<Person> form = FormBuilder.map( Person.class ).with( new PropertyNameBeanMapper<Person>() { @Override public JComponent mapBean( PropertyNameContext<Person> ctx ) { JPanel panel = new JPanel( new BorderLayout() ); panel.add( ctx.label( "name" ), BorderLayout.NORTH ); panel.add( ctx.editor( "name" ), BorderLayout.CENTER ); return panel; } } ).buildForm();
рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдХреБрдЫ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
Form<Person> form = FormBuilder.map( Person.class ).with( new SampleBeanMapper<Person>() { @Override protected JComponent mapBean( Person sample, SampleContext<Person> ctx ) { Box box = Box.createHorizontalBox(); box.add( ctx.label( sample.getName() ) ); box.add( ctx.editor( sample.getName() ) ); return box; } } ).buildForm();
рдпрджрд┐ рдЖрдк рдПрдХ рдирдореВрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (CGLIB рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг ), рдЬреЛ рд╕рдВрджрд░реНрдн рдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рддрд░реАрдХреЗ рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рджреГрд╖реНрдЯрд┐рдХреЛрдг рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЬреАрдпреВрдЖрдИ рд╣реИред
рдорд╛рдирдЪрд┐рддреНрд░рдг
Ctx.label () рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдЗрд╕реЗ JLabel рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ ctx.editor () рдХреНрдпрд╛ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╕рдВрджрд░реНрдн рдХреЗ рднреАрддрд░, рдХреБрдЫ рдорд╛рдирдЪрд┐рддреНрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП, рдЙрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рдВрдкрд╛рджрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЪрдпрди рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдЙрдард╛рдУред рдФрд░ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рдШрдЯрдХ рд╣реИ? рдХрдИ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдорд╛рди рд╡рд░реНрдЧ
- рдШрдЯрдХ рдирд┐рд░реНрдорд╛рдг рд╕рдВрдЪрд╛рд▓рди
- рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
- рдПрдХ рдШрдЯрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг (рдЙрдиреНрд╣реЗрдВ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде)
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рддреГрддреАрдп-рдкрдХреНрд╖ рдХреИрд▓реЗрдВрдбрд░ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
class DateToDateChooserMapper implements TypeMapper<JDateChooser, Date> { public Class<Date> getValueClass() { return Date.class; } public JDateChooser createEditorComponent() { return new JDateChooser(); } public Date getValue( final JDateChooser editorComponent ) { return editorComponent.getDate(); } public void setValue(final JDateChooser editorComponent, final Date value) { editorComponent.setDate( value ); } public void handleChanges(final JDateChooser editorComponent, final ChangeHandler changeHandler) { editorComponent.getDateEditor() .addPropertyChangeListener( "date", new PropertyChangeListener() { public void propertyChange( final PropertyChangeEvent evt ) { changeHandler.onChange( BackgroundMarker.INSTANCE ); } } ); } }
рдпрд╣рд╛рдБ ChangeHandler рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдШрдЯрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕реЗрдо рдХреЛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╡реИрд▓рд┐рдбреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред ValidationMarker рдХреЛ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, BackgroundMarker, рдЬреЛ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрд╕рдлрд▓ рдШрдЯрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдПред
рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ:
Form<Person> form = FormBuilder.map( Person.class ).use( new StringToTextAreaMapper() ).buildForm();
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ:
Form<Person> form = FormBuilder.map( Person.class ) .useForProperty( "description", new StringToTextAreaMapper() ) .buildForm();
рдлрд┐рд░, рдХреНрдпрд╛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рддрд╛рд░ рдХреА рдмрдЬрд╛рдп рддрд░реАрдХреЛрдВ рд╕реЗ рдмрд╛рдБрдзрдирд╛, рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рдирд╛? рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╣рдж рддрдХ рдмреЛрдЭрд┐рд▓:
Form<Person> form = FormBuilder.map( Person.class ).useForGetters( new GetterMapper<Person>() { @Override public void mapGetters( Person beanSample, GetterConfig config ) { config.use( beanSample.getDescription(), new StringToTextAreaMapper() ); } } ).buildForm();
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓рд┐рдЦрд╛ рдерд╛, рдФрд░ рдЕрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдореБрджрд╛рдп рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЕрдм рдореИрдВ рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рдПрдбреЙрдкреНрдЯрд░ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рдмрд╣реБрдд рд╣реА рдорд╛рдореВрд▓реА рд╣реИред рд╢рд╛рдпрдж рдореИрдВ рдЕрдЧрд▓реЗ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдорд╛рд╡реЗрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдХреА Google рдХреЛрдб рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
code.google.com/p/swing-formbuilderрдореИрдВрдиреЗ рд╕реВрддреНрд░реЛрдВ рдХреЛ GitHub:
github.com/aeremenok/swing-formbuilder рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛