рд╢реБрдн рджреЛрдкрд╣рд░, рдЕрднрд┐рднрд╛рд╡рдХ!
рдЖрдЬ рдореИрдВ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдФрд░ рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдШрдЯрдХреЛрдВ рдФрд░ UI рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрд▓рдмреНрдз рдЯреВрд▓ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рд╣рд┐рдорд╢реИрд▓ рдХрд╛ рдЯрд┐рдк рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди (рдФрд░ рд▓реЗрдЦ) рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ, Graphics2D рдХрд╛ рдорддрд▓рдм рд╣реИ - рдЬрд╛рд╡рд╛ 3 рдбреА рдПрдХ рдмрдбрд╝рд╛ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИ (рд╢рд╛рдпрдж рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдЖрдЬ рдирд╣реАрдВ)ред
рдЗрд╕рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдШрдЯрдХреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдХреБрдЫ рдореВрд▓ рдмрд╛рддреЗрдВ рдкрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП - рд╣рдо рдЗрд╕ рдЬреНрдЮрд╛рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
MVC рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреЛ рджреЗрдЦреЗрдВ, рддреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ 3 рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:
рдореЙрдбрд▓ - рдПрдХ рдореЙрдбрд▓ рдЬреЛ рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рджреЗрдЦреЗрдВ - рд╕реАрдзреЗ рдШрдЯрдХ рдХрд╛ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рди
рдирд┐рдпрдВрддреНрд░рдХ - рдШрдЯрдХ (рдХреАрдмреЛрд░реНрдб, рдорд╛рдЙрд╕ рдФрд░ рдЕрдиреНрдп рдЗрдирдкреБрдЯ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдШрдЯрдирд╛рдУрдВ) рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рдорд╛рдирдХ рд╕реНрд╡рд┐рдВрдЧ рдШрдЯрдХ MVC рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЗрдмрдЯрди рдореЗрдВ - рдмрдЯрдирдореЙрдбрд▓ рдмрдЯрди (рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдореЙрдбрд▓) рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдмрдЯрдирдпреВрдЖрдИ, рдЗрд╕рдХреЗ рдмрд╛рд╣рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП (рджреЗрдЦреЗрдВ)ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЬреЗрдмрдЯрди рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдШрдЯрдХреЛрдВ (рджреЗрдЦреЗрдВ) рдХреЗ рдмрд╛рд╣рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛, рдФрд░ рдЕрдЧрд░ рд╣рдо рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ - рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ 2 рдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдкреВрд░реНрдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореИрдВ рдпрд╣ рддрд░реНрдХ рдирд╣реАрдВ рджреВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд╛рдордЧреНрд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЗрддрдирд╛ рдЦрдВрдбрд┐рдд рдФрд░ рдмрд┐рдЦрд░рд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЬрдЧрд╣ рдкрд░ рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рд░рд╛рдЬреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИредрдХрдкрдбрд╝реЛрдВ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреМрди рдХрд╣рддрд╛ рд╣реИ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣рдореЗрд╢рд╛ рдЦреЗрд▓рд╛, рдЦреЗрд▓рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рдлрд▓рддрд╛ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдПрдЧрд╛ред рдЖрд╡реЗрджрди рдХреЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рднреВрдорд┐рдХрд╛ рдорд╛рдзреНрдпрдорд┐рдХ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реЛ рд╕рдХрддреА рд╣реИ - рдкреНрд░рд╛рдердорд┐рдХ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдгред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЗрдо рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдкрд╛рджрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕рдм рдХреБрдЫ рддрдп рдХрд░рддреА рд╣реИ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ рдЬреЛ рдЖрдк рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рдпрд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред
рддреЛ, рдЖрдЬ рд╣рдо Graphics2D рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдорд╛рдирдХ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреБрдЫ рддрдХрдиреАрдХреЛрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдХреНрд╕ред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдХ рд╕рдордЭрджрд╛рд░ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд┐рдирд╛, рдХреЛрдИ рднреА рд╕рд╛рдзрди рдХреБрдЫ рднреА рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ, рдЕрдлрд╕реЛрд╕, рдореИрдВ рд╢рдХреНрддрд┐рд╣реАрди рд╣реВрдВред рд╕рдВрднрд╡рддрдГ рдПрдХ рдбрд┐рдЬрд╛рдЗрдирд░ / рдпреВрдПрдХреНрд╕ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХрд▓реНрдкрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрд░рд╛рдм рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдЕрдкрдиреЗ рдЖрдк рдХреЛ "рдирд┐рдЪреЛрдбрд╝" рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдШрдЯрдХ рдХреИрд╕реЗ рджрд┐рдЦреЗрдЧрд╛ред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдФрд░ рднреА рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рд╕реАрдзреЗ рдХрд╛рдо рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддрд╛ рд╣реИредрдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪрд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛ ...
рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рдЫреЛрдЯреА рддрд╛рд▓рд┐рдХрд╛
- рдЖрдВрдХрдбрд╝реЗ
- RenderingHints
- рднрд░рдг
- рд╕рдВрд░реЗрдЦрдг рдбреНрд░рд╛рдЗрдВрдЧ
- рд╕реНрдЯреНрд░реЛрдХ
- рдЫрд╛рдпрд╛
- рд╕рд╣реА рдХрддрд░рди
- рдПрдиреАрдореЗрд╢рди
- рдХреБрдЫ рддрд░рдХреАрдмреЗрдВ
- WebLookAndFeel
- рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ ...
- рд╕рд╛рдзрди
рдЖрдВрдХрдбрд╝реЗ
рдмрд┐рдирд╛ рдЖрдВрдХрдбрд╝реЗ рдХреЗ рдХрд╣реАрдВ рдирд╣реАрдВред рдХрд┐рд╕реА рднреА рдШрдЯрдХ, рдХрд┐рд╕реА рднреА рд╕рд░рд▓рддрдо рдЪреАрдЬ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рднрд╛рдЧреЛрдВ рдХреЗ рдЖрдХреГрддрд┐ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рдПрдХ рд╕реБрдЦрдж рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрджрд┐ рдЖрдкрдХреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ рд╕реНрдореВрдерд┐рдВрдЧ рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░рднрд╛рд╡ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рднрдЧрд╡рд╛рди рдХрд╛ рд╢реБрдХреНрд░ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА - рд╕рднреА рдорд╛рдирдХ рдЖрдХрд╛рд░ (Line2D, Rectangle2D, RoundRectangle2D, Ellipse2D, Arc2D, рдЖрджрд┐) рдЬреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИрдВ - рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдореЗрдВ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдорд╛рдирдХ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднреА рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ GeneralPath) рдЬреЛ рдЖрдкрдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдиреЗ рдЖрдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдХреБрдЫ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рднреА рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╣реИрдВ:
http://java-sl.com/shapes.htmlhttp://geosoft.no/graphics/http://designervista.com/shapes/index.phphttp://www.jfree.org/jcommon/рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ - рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдпрд╣рд╛рдВ рдпрд╛
рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ (рджреЛрдиреЛрдВ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рднреА рд╣реИрдВ)ред
рдореИрдВ рдпрд╣рд╛рдБ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ (рд╢реЗрдк рд╢реЗрдк) рд╣реИ:
- рдЖрдк 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - g2d.fill (рдЖрдХрд╛рд░) рдФрд░ g2d.draw (рдЖрдХрд╛рд░)ред рднрд░реЗрдВ - рдЖрдХрд╛рд░ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдкрд┐рдХреНрд╕рд▓ рдХреЛ рднрд░рддрд╛ рд╣реИ, рдЖрдХреГрддрд┐ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдЦреАрдВрдЪрддрд╛ рд╣реИред
- рдкреЗрдВрдЯ рд╡рд░реНрдЧ (g2d.setPaint (рдкреЗрдВрдЯ рдкреЗрдВрдЯ)) рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рд╡рдВрд╢рдЬ рд░рдВрдЧ рдпрд╛ рд░рдВрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд░реЗрдВрдбрд░рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдореЛрдб рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЛрдИ рднреА рд░рдВрдЧ (рд░рдВрдЧ) рд╣реИ - рдпрд╣ рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдПрдХ рд╣реА рд░рдВрдЧ рджреЗрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдврд╛рд▓ рдФрд░ рдмрдирд╛рд╡рдЯ рднрд░рддрд╛ рд╣реИ (рдЧреНрд░реЗрдбрд┐рдПрдВрдЯрдкреЗрдВрдЯ, рдЯреЗрдХреНрд╕рдЪрд░рдкреЗрдВрдЯ, рдЖрджрд┐)ред
- рдореЛрдЯрд╛рдИ, рдЖрд╡реГрддреНрддрд┐ (рдпрд╛ рдбреИрд╢), рдФрд░ рдЖрдХреГрддрд┐ рдХреА рд╕реАрдорд╛ рд░реЗрдЦрд╛ рдХреЗ рдХреЛрдиреЛрдВ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рд╕реНрдЯреНрд░реЛрдХ (g2d.setStroke (рд╕реНрдЯреНрд░реЛрдХ)) рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред
- рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЕрдзреНрдпрд╛рдп рдореЗрдВ рджрд┐рдП рдЧрдП рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЖрдВрдХрдбрд╝реЗ, рдкрд╛рда рдФрд░ рд╕рд╛рде рд╣реА рдЕрдиреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреА рдЪреМрд░рд╕рд╛рдИ, рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИред
RenderingHints
рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдорд╛рдирдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ 2 рдбреА рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:
g2d.setRenderingHint (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЦреАрдВрдЪреА рдЧрдИ рд╕рднреА рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЛ рдЪреМрд░рд╕рд╛рдИ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рдпрд╛рдж рд░рдЦрдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рдж рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВ, рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬреЛ рдХреБрдЫ рднреА рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдмрдЯрди рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЦреАрдВрдЪреЗ рдЧрдП рдкрд╛рда рдХреЛ рдЪреМрд░рд╕рд╛рдИ рдХрд░рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди (RenderingHints.KEY_ANTIALIASING) рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдореВрдерд┐рдВрдЧ рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪрдпрди рд╣реЛрддрд╛ рд╣реИред
рдкрд╛рда рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рд╕рдХреНрд╖рдо / рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
g2d.setRenderingHint (RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
рдЬрдм рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ VALUE_TEXT_ANTIALIAS_DEFAULT рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдкрд░ рд╕реЗрдЯ рд╣реИ, рддреЛ рдпрд╣ RenderingHints.KEY_ANTIALIASING рдХреЗ рдорд╛рди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдЧрд╛ред
рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк RenderingHints рдореЗрдВ рдХрдИ рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдз рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рднреА рджреЗрдЦреЗрдВрдЧреЗ:
KEY_ANTIALIASING - рдЖрдХреГрддрд┐ рдХреЛ рдЪреМрд░рд╕рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдФрд░ рдкрд╛рда)
KEY_RENDERING - рдЧреБрдгрд╡рддреНрддрд╛ / рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЧрддрд┐ рд╕реЗрдЯ рдХрд░рдирд╛
KEY_DITHERING - рд░рдВрдЧ рдХреЛ рдПрдХ рд╕реАрдорд┐рдд рдкреИрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдирд╛
KEY_TEXT_ANTIALIASING - рдЯреЗрдХреНрд╕реНрдЯ рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧ
KEY_TEXT_LCD_CONTRAST - рд╡рд┐рд╢реЗрд╖ рдкрд╛рда рдЪреМрд░рд╕рд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рда рдХрдВрдЯреНрд░рд╛рд╕реНрдЯ (100 рд╕реЗ 250 рддрдХ)
KEY_FRACTIONALMETRICS - рдкрд╛рда рд╡рд░реНрдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА "рд╕рдЯреАрдХрддрд╛" рд╕реЗрдЯ рдХрд░рдирд╛
KEY_INTERPOLATION - рдПрдХ рдРрд╕реА рд╕реЗрдЯрд┐рдВрдЧ рдЬреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЗрдореЗрдЬ рдкрд┐рдХреНрд╕рд▓реНрд╕ рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЗрдореЗрдЬ рд░реЛрдЯреЗрдЯ рд╣реЛрддреА рд╣реИ)
KEY_ALPHA_INTERPOLATION - рдЕрд▓реНрдлрд╛ рдорд╛рдиреЛрдВ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ / рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ рд╕реЗрдЯ рдХрд░рдирд╛
KEY_COLOR_RENDERING - рдЧреБрдгрд╡рддреНрддрд╛ / рд░рдВрдЧ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ рд╕реЗрдЯ рдХрд░рдирд╛
KEY_STROKE_CONTROL - рдЕрдВрддрд┐рдо рджреГрд╢реНрдп рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдХреГрддрд┐рдпреЛрдВ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛
рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЖрдорддреМрд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣рддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, KEY_INTERPOLATION рдХреЛ VALUE_INTERPOLATION_BILINEAR рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛрдиреЗ (рд░реЛрдЯреЗрд╢рди / рд╕рдВрдкреАрдбрд╝рди / рд╢рд┐рдлреНрдЯ, рдЖрджрд┐) рдореЗрдВ рдЫрд╡рд┐ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ KEY_TEXT_LCD_CONTRAST рдХреЛ рдмрджрд▓рдХрд░ рдЕрдкрдиреА рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рдкрд╛рда рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдкрдиреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ "рдЖрдЧреЗ" рдЬрд╛рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JTextField рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдПрдХ рд╣реА рдПрдВрдЯреАрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рд╕реЗ рдкрд╛рда рдХреЛ рдЪреМрд░рд╕рд╛рдИ рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрд╢реЛрдзрди (рдФрд░ рд╢рд╛рдпрдж рдмрджрд▓рд╛рд╡) рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рднрд░рдг
рдкреЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдИ рд╕реБрд▓рдн рд╡рдВрд╢рдЬ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдЖрдХрд╛рд░ рднрд░рдиреЗ / рднрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ:
- рд░рдВрдЧ - рд╕рдмрд╕реЗ рд╕рд░рд▓, рдЖрдкрдХреЛ рдПрдХ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдХреГрддрд┐ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдпрд╛ рднрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- TexturePaint - рдЖрдкрдХреЛ рднрд░рдиреЗ / рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЗрдореЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрджрд╛ BufferedImage рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рдЧреНрд░реЗрдбрд┐рдПрдВрдЯрдкреЗрдВрдЯ - рдкреНрд░рд╛рд░рдВрдн рдФрд░ рдЕрдВрдд рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рдВрджреБ рд╕реЗ рджреВрд╕рд░реЗ рддрдХ рдПрдХ рд╕рд░рд▓ рд░реИрдЦрд┐рдХ рдврд╛рд▓ред
- LinearGradientPaint - рдПрдХ рдмрд┐рдВрджреБ рд╕реЗ рджреВрд╕рд░реЗ рддрдХ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд░реИрдЦрд┐рдХ рдврд╛рд▓ рдЙрдирдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рджреВрд░реА рдХреЗ рд╕рд╛рдеред
- RadialGradientPaint - рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░ рдврд╛рд▓ рдЬреЛ рд╡реГрддреНрдд рдФрд░ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд░рдВрдЧреЛрдВ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, LinearGradientPaint рдХреЗ рд╕рдорд╛рдиред
рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рдШрдЯрдХ рдкрд░ рддреАрди рд╕рдорд╛рди рднрд╛рдЧреЛрдВ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП 3 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг:

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рд╡реИрд╕реЗ, рд╢рд╛рдпрдж рд╣рд░ рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд░рдВрдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рднреА рднрд░рд╛рд╡ / рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЗрдВ, рдЖрдк рдЗрд╕рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ (рдЕрд▓реНрдлрд╛) рдХрд╛ рд╕рдВрдХреЗрдд рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдпрд╛ рд░рдВрдЧ (255, 255, 255, 128) - 50% рд╕рдлреЗрдж рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢реАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд▓реНрдлрд╛ 128 рд╣реИред рдпрд╣ 0 рд╕реЗ 255 рддрдХ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред 0 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд░рдВрдЧ рд╣реИ, 255 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)редрд╕рдВрд░реЗрдЦрдг рдбреНрд░рд╛рдЗрдВрдЧ
рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЪреАрдЬреЛрдВ рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ ...
рд╕рдВрд░реЗрдЦрдг (рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ - рд╕рдордЧреНрд░) рдЖрдкрдХреЛ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдирдП рддреИрдпрд╛рд░ рдЖрдХреГрддрд┐рдпреЛрдВ / рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХреЗ рд╡рд┐рднрд┐рдиреНрди "рдореЛрдб" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдореИрдВ рд╕рдВрд░реЗрдЦрдг рдХреЗ рд╡рд┐рднрд┐рдиреНрди "рдореЛрдб" рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рдлрд▓ рдЪрд┐рддреНрд░рдг рдкрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрд░реЗрдЦрд┐рдд рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдЙрдирдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА
рдпрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ ред рдкреНрд░рддреНрдпреЗрдХ "рдореЛрдб" рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рднреА рд╣реИред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдореИрдВ AlphaComposite.SRC_OVER рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдЪреАрдЬреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдореЗрдВ рдЖрдЧреЗ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдореЛрдб рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХред
рдХрдореНрдкреЛрдЬрд┐рдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рдирдХ рд▓реЛрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЬреНрдпрд╛рдорд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдорд┐рд▓рд╛рдХрд░ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдЖрдХрд╛рд░ рдмрдирд╛рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг:

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ 2 рд▓рд╛рдЗрдиреЗрдВ рд▓рдЧреАрдВ:
Area area = new Area ( new Ellipse2D.Double ( 0, 0, 75, 75 ) );
area.add ( new Area ( new Ellipse2D.Double ( 0, 50, 75, 75 ) ) );
рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрдпрд╛ рд╣реИ - рдирдП рдЖрдВрдХрдбрд╝реЗ рдХреА рд╕реАрдорд╛ рдореЗрдВ рджреАрд░реНрдШрд╡реГрддреНрдд (рдЬреЛ рджреАрд░реНрдШрд╡реГрддреНрдд рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЗ рдЕрдВрджрд░ рдЧрд┐рд░ рдЧрдП) рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рднрд╛рдЧреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрд╣ рди рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рдЖрдХреГрддрд┐рдпреЛрдВ рдореЗрдВ рдирдП рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЪреМрд░рд╛рд╣реЗ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХреБрдЫ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЛ рджреВрд╕рд░реЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЖрдХреГрддрд┐ (рд╕реАрдорд╛) рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдорд╛рдУрдВ рд╕реЗ рд╕реАрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЙрдкрд▓рдмреНрдз рд╕рд░рд▓ рдЖрдХреГрддрд┐рдпреЛрдВ рд╕реЗ рдЬрдЯрд┐рд▓ рдЖрдХрд╛рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣ рдЖрдХреГрддрд┐ рд╡рд░реНрдЧ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдмрдирд╛рдП рдФрд░ рдЙрд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЖрдХреГрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдпрд╣ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдФрд░ рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рджреЛрдиреЛрдВ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛редрд╕реНрдЯреНрд░реЛрдХ
... рдпрд╛
TheShock рдиреЗ "рд╕реНрдЯреНрд░реЛрдХ" рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрдЯреНрд░реЛрдХ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреА рдбреНрд░реЙ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЦреАрдВрдЪреА рдЧрдИ рд╕реАрдорд╛ рдХреА рд╢реИрд▓реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдорд╛рдирдХ JDK рдореЗрдВ, рд╕реНрдЯреНрд░реЛрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХреЗрд╡рд▓ 1 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ - рдмреЗрд╕рд┐рдХрд╕реНрдЯреНрд░реЛрдХред рдпрд╣ рдЖрдкрдХреЛ рд▓рд╛рдЗрди рдХреА рдЪреМрдбрд╝рд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рд╕рд┐рд░реЛрдВ рдкрд░ рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдзрд░рд╛рд╢рд╛рдпреА рд▓рд╛рдЗрдиреЗрдВ рднреА рдмрдирд╛рддреЗ рд╣реИрдВред
рд╕реНрдЯреНрд░реЛрдХ рдХреЛ рдХреЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВ:
g2d.setStroke ( new BasicStroke ( 2f ) );
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдмрд╛рдж рдХреЗ рд╕рднреА рдмреЙрд░реНрдбрд░рдмреЛрд░реНрдб рдХреЛ 2 рдкрд┐рдХреНрд╕рд▓ рдЪреМрдбрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред
рд╡реИрд╕реЗ, рдбрд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдлреНрд▓реЛрдЯ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) - рдЧреИрд░-рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛рдПрдВ рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп рдХреЗрд╡рд▓ "рд╕реНрдореАрдпрд░" рд▓рд╛рдЗрдиреЗрдВ / рд░реВрдкрд░реЗрдЦрд╛ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВред
рдмреЗрд╕рд┐рдХрд╕реНрдЯреНрд░реЛрдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдБ ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ JDK рдореЗрдВ рд╕реНрдЯреНрд░реЛрдХ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХред
рдЫрд╛рдпрд╛
Java2D рдореЗрдВ рдЫрд╛рдпрд╛ рдХрд╛ рдХреЛрдИ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЫрд╛рдпрд╛ рдХреЗ "рдкреНрд░рднрд╛рд╡" рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВ - рдореИрдВ рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рдЖрдЗрдП рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ ...
рдореВрд▓ рдЖрдХреГрддрд┐ рдХреЗ рдПрдХ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ / рд╕рдВрд╢реЛрдзрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЫрд╛рдпрд╛

рджреВрд╕рд░реА рдЫрд╡рд┐ рдореЗрдВ - рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЫрд╛рдпрд╛ рдХрд╛ рдПрдХ рд╕рдВрдХреАрд░реНрдг рдФрд░ рднрдХреНрд╖рдХ рд╕рдВрд╕реНрдХрд░рдгред
(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЫрд╛рдпрд╛ рдХреЗрд╡рд▓ рддрднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдЬрдм рдпрд╣ рдореВрд▓ рдЖрдХрд╛рд░ рдХреЗ рдХрд┐рдирд╛рд░реЗ рд╕реЗ рдЕрдзрд┐рдХ 1-3 рдкрд┐рдХреНрд╕реЗрд▓ рддрдХ рдирд╣реАрдВ рдлреИрд▓рддреА рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рд▓рдЧрдиреЗ рд▓рдЧрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЛрдЭрд┐рд▓ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдЫрд╛рдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдФрд░ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
Iterative рдЫрд╛рдпрд╛рдмрд╛рд░-рдмрд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдЖрдХреГрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдЫрд╛рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ, рдЖрдХреГрддрд┐ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рддрд╛ рд╣реИ (рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ) рдФрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдШрдЯ рдЬрд╛рддреА рд╣реИ (рдпрд╛ рд░рдВрдЧ рдмрджрд▓рддрд╛ рд╣реИ)ред

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЫрд╛рдпрд╛ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдпрд╣ рдФрд░ рднреА рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рд╣реИ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╕рд╛рде рд╣реА, рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдкреАрдб рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЧреИрд░-рдЗрд╖реНрдЯрддрдо рд╣реИред
рдзреАрд░реЗ-рдзреАрд░реЗ рдЫрд╛рдпрд╛рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЖрдХреГрддрд┐ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдврд╛рд▓ рднрд░рдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдпрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ 8 рднрд╛рдЧ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рднрд░рд╛рд╡ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

4 рдорд╛рдорд▓реЛрдВ рдореЗрдВ - LinearGradientPaint, рдЕрдиреНрдп 4 рдорд╛рдорд▓реЛрдВ рдореЗрдВ - RadialGradientPaintред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдРрд╕реА рд╕рд╛рдл-рд╕реБрдерд░реА рдЫрд╛рдпрд╛ рд╣реИ:

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рдЖрдк рдврд╛рд▓ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд▓рд╛рдн рдЫрд╛рдпрд╛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рдЧрддрд┐ рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдлрд┐рд░ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп рд╕реНрдЯреНрд░реЛрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдЫрд╛рдпрд╛рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдПрдХ рдЪрд░ рд░рдВрдЧ / рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдФрд░ рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рд╕рд╛рде рдЖрдВрдХрдбрд╝рд╛ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЫрд╛рдпрд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рдЪреВрдВрдХрд┐ рдЖрдХреГрддрд┐ рдХрд╛ рдЖрдХрд╛рд░ рдмрд┐рд▓реНрдХреБрд▓ рдЫрд╛рдпрд╛ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдЖрдВрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЫрд╛рдпрд╛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
private void drawShade ( Graphics2D g2d, RoundRectangle2D rr, Color shadeColor, int width )
{
Composite comp = g2d.getComposite ();
Stroke old = g2d.getStroke ();
width = width * 2;
for ( int i = width; i >= 2; i -= 2 )
{
float opacity = ( float ) ( width - i ) / ( width - 1 );
g2d.setColor ( shadeColor );
g2d.setComposite ( AlphaComposite.getInstance ( AlphaComposite.SRC_OVER, opacity ) );
g2d.setStroke ( new BasicStroke ( i ) );
g2d.draw ( rr );
}
g2d.setStroke ( old );
g2d.setComposite ( comp );
}
рдЫрд╡рд┐ рдЫрд╛рдпрд╛рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд┐рдЫрд▓реЗ рдХрд┐рд╕реА рднреА рддрд░реАрдХреЗ рд╕реЗ рдЫрд╛рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдВрдХрдбрд╝рд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдпрддрд╛рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧреЛрд▓ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдирд╛рдХрд╛рд░ рднреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЫрд╛рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреВрд╕рд░реА рддрд░рдл рдереЛрдбрд╝рд╛ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВрдЧреЗ - рдЕрд▓реНрдлрд╛рдХрдореНрдкреЛрд╕рд┐рдЯ рдХреА рдорджрдж рд╕реЗ рд╣рдо рдореВрд▓ рдЫрд╡рд┐ рдХреА рдПрдХ-рд░рдВрдЧ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдЫрд╛рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рдмреЗрд╢рдХ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдРрд╕реА рдЫрд╛рдпрд╛ рдХрд░реЗрдЧреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореИрдВ рдЫрд╛рдпрд╛ рдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рдЪрд┐рдХрдиреА / рдврд╛рд▓ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╣рдо рдЗрд╕рдХреА рдЕрдзрд┐рдХ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк "рдЫрд╛рдпрд╛" рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ )
рд╕рдЪ рдХрд╣реВрдВ рддреЛ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ
рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рддреИрдпрд╛рд░ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЕрддрд┐рд░рд┐рдХреНрдд рдзрди рдХреЗ рдмрд┐рдирд╛ рднреА, рдЖрдк рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЫрд╛рдпрд╛ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ "рдзреБрдВрдзрд▓рд╛" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЫрд╡рд┐ рдХреЗ рдиреАрдЪреЗ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реИрд╕реЗ, рдЗрд╕ рдЫрд╛рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдВрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдЕрд▓рдЧ рдЫрд╡рд┐ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХрд╛рдлреА рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдВрдХрдбрд╝рд╛ (рдпреЛрдВ) рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ - рдмрд╕ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ "рдХреИрдкреНрдЪрд░" рдХрд░реЗрдВ рдФрд░ рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рд╕рдВрд╕рд╛рдзрди рд▓рд╛рдЧрддреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛редрд╕рд╣реА рдХрддрд░рди
рдореИрдВ рдЖрдкрдХреЛ рдЕрд▓рдЧ рд╕реЗ рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдХрд┐ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдФрд░ "рд╕рд╣реА" рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдХреНрд▓рд┐рдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдпрд╛ - рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЕрдирд╛рд╡рд╢реНрдпрдХ рднрд╛рдЧреЛрдВ рдХреЛ рдХрд╛рдЯ рджреЗрдирд╛ред
рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрд╕ рдлреЙрд░реНрдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ "рдХреНрд▓рд┐рдкрд┐рдВрдЧ" рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА:
g.setClip ( x, y, width, height );
g.setClip ( new Rectangle ( x, y, width, height ) );
g.setClip ( new Rectangle2D.Double ( x, y, width, height ) );
рдЗрди рддреАрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рд╣реА рдЖрдпрддрд╛рдХрд╛рд░ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдХреНрд╖реЗрддреНрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╣реЛрдЧреАред
рдРрд╕реЗ рдХрдИ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдХрд░рдг рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрддрд░рди рд░реВрдк рд╣рдореЗрд╢рд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдШрдЯрдХ рдХреА рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИ) - рдпрд╣ рдШрдЯрдХ рдХреЛ рдЕрдкрдиреА рд╕реАрдорд╛рдУрдВ рдХреЗ "рдХреНрд░реЙрд▓ рдЖрдЙрдЯ" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЕрдкрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдХреНрд╖реЗрддреНрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╕, рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Shape oldClip = g.getClip ();
Shape newClip = new Rectangle ( x, y, width, height );
Area clip = new Area ( oldClip );
clip.intersect ( new Area ( newClip ) );
g.setClip ( clip );
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдореМрдЬреВрджрд╛ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдирдП рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдЖрдк рдШрдЯрдХ рд╕реАрдорд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рдЦреЛрдПрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдПрдХ рдирдпрд╛ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЫрд╛рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдЕрдзреНрдпрд╛рдп рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдмрд┐рдВрджреБ 4 рдкрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрддреЗ рд╣реИрдВ - рддреЛ рдЫрд╛рдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЛ рдХрд╛рдЯрдХрд░ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
public static void drawShade ( Graphics2D g2d, Shape shape, Color shadeColor, int width,
Shape clip, boolean round )
{
Shape oldClip = g2d.getClip ();
if ( clip != null )
{
Area finalClip = new Area ( clip );
finalClip.intersect ( new Area ( oldClip ) );
g2d.setClip ( finalClip );
}
Composite comp = g2d.getComposite ();
float currentComposite = 1f;
if ( comp instanceof AlphaComposite )
{
currentComposite = ( ( AlphaComposite ) comp ).getAlpha ();
}
Stroke old = g2d.getStroke ();
width = width * 2;
for ( int i = width; i >= 2; i -= 2 )
{
float opacity = ( float ) ( width - i ) / ( width - 1 );
g2d.setColor ( shadeColor );
g2d.setComposite ( AlphaComposite
.getInstance ( AlphaComposite.SRC_OVER, opacity * currentComposite ) );
g2d.setStroke (
new BasicStroke ( i, round ? BasicStroke.CAP_ROUND : BasicStroke.CAP_BUTT,
BasicStroke.JOIN_ROUND ) );
g2d.draw ( shape );
}
g2d.setStroke ( old );
g2d.setComposite ( comp );
if ( clip != null )
{
g2d.setClip ( oldClip );
}
}
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рдХрддрд░рди рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рдмрд╛рдХреА рдХрд╛рдо рдХрд░реЗрдЧреАред
рдЬреИрд╕рд╛ рдХрд┐ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЧреИрд░-рдЦреАрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рднрд╛рдЧреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрди рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ) рдХреЛ рдХрд╛рдЯрдиреЗ рд╕реЗ рдХрд╛рдо рдХреА рдЧрддрд┐ рдореЗрдВ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЧрдгрдирд╛ рдЬреИрд╕реЗ "рдХреНрдпрд╛, рдХрд╣рд╛рдБ рдФрд░ рдХреИрд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ" рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИ, рднрд▓реЗ рд╣реА рдХреНрд▓рд┐рдк 1 "рдЙрдкрд▓рдмреНрдз" рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░ рд╕реЗрдЯ рд╣реЛред рддреЛ "рдореИрдиреБрдЕрд▓" рдЕрдиреБрдХреВрд▓рди рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдХреНрд▓рд┐рдк, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЬрдЯрд┐рд▓ рднрд╛рдЧреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдФрд░ рд╕реАрдорд╛рдУрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдкрдбрд╝реЛрд╕реА рдШрдЯрдХ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдУрд╡рд░рд▓реИрдк рди рдХрд░реЗрдВредрдПрдиреАрдореЗрд╢рди
рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдПрдиреАрдореЗрд╢рди рд╕реНрд╡рдпрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рд╢реНрди рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рдПрдиреАрдореЗрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ "рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕" рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд░рд┐рдбрд░рд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рди рднреВрд▓реЗрдВ - рдЕрд░реНрдерд╛рддреН, рдПрдирд┐рдореЗрдЯреЗрдб рдШрдЯрдХ рдХреЗ рдХреЗрд╡рд▓ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рдереЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд░реЗрдкреЗрдВрдЯ (рдирдП рдЖрдпрдд (x, y, рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ)) рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рдЖрдЗрдП рдПрдиреАрдореЗрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рд╣рдо рдЬреЗрд▓реЗрдмреЗрд▓ рдХреЗ рдкрд╛рда рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЪрдХрд╛рдЪреМрдВрдз рдХрд╛ рдкреНрд░рднрд╛рд╡ рдкреИрджрд╛ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдЗрдП "рд╣рд╛рдЗрд▓рд╛рдЗрдЯ" рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдврд╛рд▓ (рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣рд▓реНрдХреЗ рднреВрд░реЗ рд░рдВрдЧ рд╕реЗ рдХрд┐рдирд╛рд░реЗ рдкрд░ рд░рдВрдЧ) (рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП) рд╕реЗ рднрд░рд╛ рд╕рд░реНрдХрд▓ рд▓реЗрдВред рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЯрд╛рдЗрдорд░ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдЪрдХреНрд░ рдХреЛ рдШрдЯрдХ рдХреЗ рд╢реБрд░реВ рд╕реЗ рдЕрдВрдд рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рддреЛ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
private boolean animating = false ;
private int animationX = 0;
private int animationLength = 140;
private float [] fractions = { 0f, 1f };
private Color[] colors = new Color[]{ new Color ( 200, 200, 200 ), new Color ( 0, 0, 0 ) };
protected void paintComponent ( Graphics g )
{
// ,
BufferedImage bi =
new BufferedImage ( getWidth (), getHeight (), BufferedImage.TYPE_INT_ARGB );
Graphics2D g2d = bi.createGraphics ();
g2d.setFont ( g.getFont () );
//
super.paintComponent ( g2d );
//
if ( animating )
{
g2d.setRenderingHint ( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON );
g2d.setComposite ( AlphaComposite.getInstance ( AlphaComposite.SRC_IN ) );
g2d.setPaint ( new RadialGradientPaint ( animationX - animationLength / 2,
getHeight () / 2, animationLength / 2, fractions, colors ) );
g2d.fillRect ( animationX - animationLength, 0, animationLength, getHeight () );
}
//
g2d.dispose ();
g.drawImage ( bi, 0, 0, null );
}
рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдПрдХ рдЕрд▓рдЧ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкрд╛рда рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╕рдордп рд╕рдордЧреНрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ред
рдЫрд╡рд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдЙрди рдкрд┐рдХреНрд╕рд▓реНрд╕ рдЬрд┐рдирдореЗрдВ рдкрд╛рда рд╣реЛ рдЙрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдП, рдЕрдиреНрдпрдерд╛, рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ AlphaComposite.SRC_IN рд╡рд┐рдзрд┐ рдкрд░ рдорд╛рдирдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдврд╛рд▓ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рднрд░реЗ рд╣реБрдП рдЖрдпрдд рдХреЛ рднрд░ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЪрд╛рд░реНрдЯ рдкрд░ рдкрд╛рда рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рдкреИрдирд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реЛрдЧрд╛ред (рдкреИрдирд▓) рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдбред
рдЗрд╕рд▓рд┐рдП, рдЕрдм рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрдорд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХрд╣рддреЗ рд╣реИрдВ, рдЬрдм рдХрд░реНрд╕рд░ JLabel рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ:
private static class AnimatedLabel extends JLabel
{
public AnimatedLabel ( String text )
{
super ( text );
setupSettings ();
}
private void setupSettings ()
{
//
setOpaque ( false );
//
setFont ( getFont ().deriveFont ( Font .BOLD ).deriveFont ( 30f ) );
// ,
addMouseListener ( new MouseAdapter()
{
public void mouseEntered ( MouseEvent e )
{
startAnimation ();
}
} );
}
private Timer animator = null ;
private boolean animating = false ;
private int animationX = 0;
private int animationLength = 140;
private float [] fractions = { 0f, 1f };
private Color[] colors = new Color[]{ new Color ( 200, 200, 200 ), new Color ( 0, 0, 0 ) };
private void startAnimation ()
{
// ,
if ( animator != null && animator.isRunning () )
{
return ;
}
//
animating = true ;
animationX = 0;
animator = new Timer ( 1000 / 48, new ActionListener()
{
public void actionPerformed ( ActionEvent e )
{
//
if ( animationX < getWidth () + animationLength )
{
animationX += 10;
AnimatedButton. this .repaint ();
}
else
{
animator.stop ();
}
}
} );
animator.start ();
}
protected void paintComponent ( Graphics g )
{
//
}
}
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рдЖрдкрдХреЛ рдХреБрдЫ рднреА рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред
рдирддреАрдЬрддрди, рд╣рдореЗрдВ
рдРрд╕рд╛ рдордЬрд╝реЗрджрд╛рд░ рдкреНрд░рднрд╛рд╡ рдорд┐рд▓рддрд╛ рд╣реИред
рдмреЗрд╢рдХ, рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗрд╡рд▓ рд╣рд┐рдорд╢реИрд▓ рдХреЗ рдЯрд┐рдк рд╣реИред рдЕрдЪреНрдЫреА рдХрд▓реНрдкрдирд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд┐рд░ рдпрд╛ рдПрдирд┐рдореЗрдЯреЗрдб рдЪреАрдЬреЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдХреБрдЫ рддрд░рдХреАрдмреЗрдВ
рдХрднреА-рдХрднреА рдпрд╣ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди "рдЯреНрд░рд┐рдХреА" рдЪреАрдЬреЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдиреЗрдЯ рдФрд░ "рдЖрд╡рд┐рд╖реНрдХрд╛рд░рд┐рдд рд╕рд╛рдЗрдХрд┐рд▓" рдкрд░ рдкрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рддреЛ, рдЪрд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛ ...
рдПрдЬ рд╕реНрдореВрдерд┐рдВрдЧрдорд╛рдирд╛ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЫрд╡рд┐ рдХреЛ рдХреНрд░реЙрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирдХ рд╕рд╛рдзрди рдЬреИрд╕реЗ рдХреНрд▓рд┐рдк рдЬрдм рд░реЗрдВрдбрд░рд┐рдВрдЧ рдПрдХ рдкрд░рд┐рдгрд╛рдореА рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ AlphaComposite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
ImageIcon icon = new ImageIcon ( iconPath );
BufferedImage roundedImage = new BufferedImage ( icon.getIconWidth (), icon.getIconHeight (),
BufferedImage.TYPE_INT_ARGB );
Graphics2D g2d = roundedImage.createGraphics ();
g2d.setRenderingHint ( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
g2d.setPaint ( Color.WHITE );
g2d.fillRoundRect ( 0, 0, icon.getIconWidth (), icon.getIconHeight (), 10, 10 );
g2d.setComposite ( AlphaComposite.getInstance ( AlphaComposite.SRC_IN ) );
g2d.drawImage ( icon.getImage (), 0, 0, null );
g2d.dispose ();
ImageIcon roundedIcon = new ImageIcon ( roundedImage );
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкрд╣рд▓реЗ рдХреЛрдиреЛрдВ рдореЗрдВ рдЪрд┐рдХрдиреА рдЧреЛрд▓ рдЧреЛрд▓ рдЖрдпрдд рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рд╕реНрдЯреИрдВрд╕рд┐рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╢реАрд░реНрд╖ рдкрд░ рдЫрд╡рд┐ рдХреЛ рдУрд╡рд░рд▓реЗ рдХрд░рддреЗ рд╣реИрдВред
рдХрд╕реНрдЯрдо рд╕реНрдЯреНрд░реЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛рдмрд╣реБрдд рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЕрдкрдиреА рдЦреБрдж рдХреА рд╕реНрдЯреНрд░реЛрдХ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрдиреЗ рдкрд░ рдПрдХ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк
рд▓реЗрдЦ рдорд┐рд▓рд╛ред
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рд╕рдорд╛рди рд╕реНрдЯреНрд░реЛрдХ рдмрд╣реБрдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИред
рдмреНрд▓рд░ / рд╢реИрдбреЛ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛рдЙрд╕реА рд╕рдВрд╕рд╛рдзрди рдкрд░ рдЖрдк рдмреНрд▓рд░ рдкрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк
рд▓реЗрдЦ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЧреНрд▓рд╛рдЗрдлрд╝реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп "рддрдирд╛рд╡рдкреВрд░реНрдг" рдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд╛рда рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпрд╣ рдкрд╛рда рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдкрд╛рда рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрдерд┐рддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдРрд╕реА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рджреЛ рдЙрдкрдХрд░рдг рд╣реИрдВ:
1. рдлреЙрдиреНрдЯрдореЗрдЯреНрд░рд┐рдХреНрд╕
рдЗрд╕реЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ 2 рдбреА рдЙрджрд╛рд╣рд░рдг (g2d.getFontMetrics ()) рд╕реЗ рд╕реАрдзреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдлрд╝реЙрдиреНрдЯ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░ рдФрд░ рдКрдБрдЪрд╛рдИ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
2. рдЧреНрд▓рд┐рдлрд╝рд╡реЗрдХреНрдЯрд░
рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдкрд╛рда рдХреЛ Y- рд╕рдордиреНрд╡рдп рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд╛рда рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЬрд╛рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
FontMetrics fm = g2d.getFontMetrics ();
GlyphVector gv = g2d.getFont ().createGlyphVector ( fm.getFontRenderContext (), "Text" );
Rectangle visualBounds = gv.getVisualBounds ().getBounds ();
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЧреНрд▓рд╛рдЗрдлрд╝реЗрдХреНрдЯрд░ рд╕реЗ рдмрд╣реБрдд рд╕реА рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рда рдХреА рдмрд╛рд╣рд░реА рд╕реАрдорд╛ (рд╕реАрдзреЗ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░):
Shape textOutline = gv.getOutline ();
рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЯреВрд▓рдЯрд┐рдк рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рдПрдВрд╕реНрд╡рд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рд╕реА рднрджреНрджрд╛ рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдШрдЯрдХреЛрдВ рдХреЗ рдпреВрдЖрдИ рдХреЛ рдмрджрд▓рдХрд░ рдпрд╛ рдЙрдирдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реБрдЪрд╛рд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЪреАрдЬреЗрдВ рдЗрддрдиреА рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИрдВред
рд╕рднреА J- рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдХреА рдкреНрд░рдгрд╛рд▓реА рд╕рд┐рд░реНрдл рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рдЪреВрдВрдХрд┐ рджрд┐рдЦрд╛рдП рдЧрдП рд╕рднреА рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдПрдХ рдЕрд▓рдЧ
рд╕рдЦреНрддреА рд╕реЗ рдЖрдпрддрд╛рдХрд╛рд░ рдкреЙрдкрдЕрдк (рд╣рд▓реНрдХреЗ рдпрд╛ рднрд╛рд░реА рд╡рдЬрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЯреВрд▓рдЯрд┐рдк рдЦрд┐рдбрд╝рдХреА рдХреЗ рднреАрддрд░ рдЧрд┐рд░рддреА рд╣реИ) - рд╣рдо рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдЖрдХрд╛рд░ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рджреБрдЦрдж рд╣реИред рдФрд░ рдпрд╣ рд╕реНрд╡рдЪреНрдЫ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЧреЛрд▓ рдЖрдХрд╛рд░ рдХреЗ рдпреБрдЧ рдореЗрдВ рд╣реИ!
рдмреЗрд╢рдХ, рдЖрдк рдорд╛рдирдХ рдЯреВрд▓рдЯрд┐рдкрдореИрдирдЧрд░ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдЖрдХрд╛рд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЕрднреА рднреА рд╕рднреА рдУрдПрд╕ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдФрд░ рдЗрд╖реНрдЯрддрдо рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЧреНрд▓рд╛рд╕рдкреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛, рдЬреЛ рд╕рднреА рдорд╛рдирдХ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдЯреВрд▓рдЯрд┐рдк рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ (рдФрд░ рдмрд╛рдж рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЖрдВрддрд░рд┐рдХ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░)ред
рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рд╣реА рдХрдИ рднрд╛рдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
1. рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдмрдВрдзрдХ (
TooltipManager.java ), рдЬреЛ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдП рдПрдХ GlassPane рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдЯреВрд▓рдЯрд┐рдк рдЦреБрд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИред рдЯреВрд▓рдЯрд┐рдк рдХрд╛ рдЖрдЧреЗ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕реАрдзреЗ рдЧреНрд▓рд╛рд╕рдкреИрди рдореЗрдВ рд╣реЛрдЧрд╛ред
2. GlassPane (
TooltipGlassPane.java ) рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдкреИрдирд▓ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдИрд╡реЗрдВрдЯ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рд╕рдордп рдкрд░ рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
3. рдЯреВрд▓рдЯрд┐рдк рд╕реНрд╡рдпрдВ (
CustomTooltip.java ) рдПрдХ рдорд╛рдирдХ J- рдШрдЯрдХ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реБрдЦрдж рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ GlassPane рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рджрд░реНрд╢рд┐рдд рдЯреВрд▓рдЯрд╛рдЗрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
рдЖрдк рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкреВрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╣реБрдд рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ред рд╡рд┐рдЪрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд╛рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВредрд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕реВрдЪреАрдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ "рд╕рд╛рдЗрдХрд┐рд▓" рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореМрдЬреВрджрд╛ рдШрдЯрдХреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЬрд┐рд▓реЗрдЯ рдШрдЯрдХ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╢реБрд░реВ рдореЗрдВ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдЕрдм рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдХрдореА рдХреЛ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдкрд╛рджрдХ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛:
public interface ListEditor
{
public void installEditor ( JList list, Runnable startEdit );
public boolean isCellEditable ( JList list, int index, Object value );
public JComponent createEditor ( JList list, int index, Object value );
public Rectangle getEditorBounds ( JList list, int index, Object value , Rectangle cellBounds );
public void setupEditorActions ( JList list, Object value , Runnable cancelEdit,
Runnable finishEdit );
public Object getEditorValue ( JList list, int index, Object oldValue );
public boolean updateModelValue ( JList list, int index, Object value , boolean updateSelection );
public void editStarted ( JList list, int index );
public void editFinished ( JList list, int index, Object oldValue, Object newValue );
public void editCancelled ( JList list, int index );
}
рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдЖрдкрдХреЛ рд╡рд╣ рд╕рдм рдХреБрдЫ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдирд╛ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИ, рдЖрдЗрдП рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
public abstract class AbstractListEditor implements ListEditor
{
protected int editedCell = -1;
public void installEditor ( final JList list, final Runnable startEdit )
{
// ,
list.addMouseListener ( new MouseAdapter()
{
public void mouseClicked ( MouseEvent e )
{
if ( e.getClickCount () == 2 && SwingUtilities.isLeftMouseButton ( e ) )
{
startEdit.run ();
}
}
} );
list.addKeyListener ( new KeyAdapter()
{
public void keyReleased ( KeyEvent e )
{
if ( e.getKeyCode () == KeyEvent.VK_F2 )
{
startEdit.run ();
}
}
} );
}
public boolean isCellEditable ( JList list, int index, Object value )
{
return true ;
}
public Rectangle getEditorBounds ( JList list, int index, Object value , Rectangle cellBounds )
{
//
return new Rectangle ( 0, 0, cellBounds.width, cellBounds.height + 1 );
}
public boolean updateModelValue ( JList list, int index, Object value , boolean updateSelection )
{
//
ListModel model = list.getModel ();
if ( model instanceof DefaultListModel )
{
( ( DefaultListModel ) model ).setElementAt ( value , index );
list.repaint ();
return true ;
}
else if ( model instanceof AbstractListModel )
{
final Object[] values = new Object[ model.getSize () ];
for ( int i = 0; i < model.getSize (); i++ )
{
if ( editedCell != i )
{
values[ i ] = model.getElementAt ( i );
}
else
{
values[ i ] = value ;
}
}
list.setModel ( new AbstractListModel()
{
public int getSize ()
{
return values.length;
}
public Object getElementAt ( int index )
{
return values[ index ];
}
} );
return true ;
}
else
{
return false ;
}
}
public void editStarted ( JList list, int index )
{
//
editedCell = index;
}
public void editFinished ( JList list, int index, Object oldValue, Object newValue )
{
//
editedCell = -1;
}
public void editCancelled ( JList list, int index )
{
//
editedCell = -1;
}
public boolean isEditing ()
{
//
return editedCell != -1;
}
}
рдЕрдм, рдЗрд╕ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ - рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ -
WebStringListEditor.java ред
рдЕрдВрддрд┐рдо рдХреНрд╖рдг рд╢реЗрд╖ рд╣реИ - рд╕реВрдЪреА рдореЗрдВ рд╕рдВрдкрд╛рджрдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ред рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдмрдирд╛рдПрдВ:
public class ListUtils
{
public static void installEditor ( final JList list, final ListEditor listEditor )
{
// ,
final Runnable startEdit = new Runnable()
{
public void run ()
{
//
final int index = list.getSelectedIndex ();
if ( list.getSelectedIndices ().length != 1 || index == -1 )
{
return ;
}
//
final Object value = list.getModel ().getElementAt ( index );
if ( !listEditor.isCellEditable ( list, index, value ) )
{
return ;
}
//
final JComponent editor = listEditor.createEditor ( list, index, value );
//
editor.setBounds ( computeCellEditorBounds ( index, value , list, listEditor ) );
list.addComponentListener ( new ComponentAdapter()
{
public void componentResized ( ComponentEvent e )
{
checkEditorBounds ();
}
private void checkEditorBounds ()
{
Rectangle newBounds =
computeCellEditorBounds ( index, value , list, listEditor );
if ( newBounds != null && !newBounds.equals ( editor.getBounds () ) )
{
editor.setBounds ( newBounds );
list.revalidate ();
list.repaint ();
}
}
} );
//
list.add ( editor );
list.revalidate ();
list.repaint ();
//
if ( editor.isFocusable () )
{
editor.requestFocus ();
editor.requestFocusInWindow ();
}
//
final Runnable cancelEdit = new Runnable()
{
public void run ()
{
list.remove ( editor );
list.revalidate ();
list.repaint ();
listEditor.editCancelled ( list, index );
}
};
final Runnable finishEdit = new Runnable()
{
public void run ()
{
Object newValue = listEditor.getEditorValue ( list, index, value );
boolean changed =
listEditor.updateModelValue ( list, index, newValue, true );
list.remove ( editor );
list.revalidate ();
list.repaint ();
if ( changed )
{
listEditor.editFinished ( list, index, value , newValue );
}
else
{
listEditor.editCancelled ( list, index );
}
}
};
listEditor.setupEditorActions ( list, value , cancelEdit, finishEdit );
//
listEditor.editStarted ( list, index );
}
};
listEditor.installEditor ( list, startEdit );
}
private static Rectangle computeCellEditorBounds ( int index, Object value , JList list,
ListEditor listEditor )
{
//
Rectangle cellBounds = list.getCellBounds ( index, index );
if ( cellBounds != null )
{
Rectangle editorBounds = listEditor.getEditorBounds ( list, index, value , cellBounds );
return new Rectangle ( cellBounds.x + editorBounds.x, cellBounds.y + editorBounds.y,
editorBounds.width, editorBounds.height );
}
else
{
return null ;
}
}
}
рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЕрдм рд╣рдо рд╕рдВрдкрд╛рджрдХ рдХреЛ рдХрд┐рд╕реА рднреА рдЙрдкрд▓рдмреНрдз рд╕реВрдЪреА рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдореЙрдбрд▓ рдореЗрдВ рдЧреИрд░-рд╕реНрдЯреНрд░рд┐рдВрдЧрд┐рдВрдЧрдореА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдкрд╛рджрдХ рд╕реЗ / рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ / рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣
WebStringListEditor.java рдореЗрдВ рджреЛ рддрд░реАрдХреЛрдВ (рдмреЗрд╢рдХ, рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдкрд╛рджрдХ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - createEditor рдФрд░ getEditorValueред
рд╡реЗрдм рд▓реБрдХ рдФрд░ рдлреАрд▓

рдЪреВрдВрдХрд┐ рдореИрдВ рд╕реНрд╡рд┐рдВрдЧ рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рд╕рдорд░реНрдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рдпреВрдЖрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЙрдиреНрдирдд рдШрдЯрдХреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛, рдЬреЛ рдЕрдХреНрд╕рд░ рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдереЛрдбрд╝рд╛-рдереЛрдбрд╝рд╛ рдХрд░рдХреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд▓рдЧрд╛ -
WebLookAndFeel ред
рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреЛрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕реЛрдВ рдХреЛ рд▓рд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рд╕рд╛рде рд╣реА рдХреБрдЫ рдЕрдиреНрдп, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдж рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рд╡реИрд╕реЗ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдореЗрд░реА рдирд╛рдХ рдореЗрдВ рд╣рдорд╛рд░реЗ
рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрддреНрдкрд╛рдж рдХреЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИ, рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рджрд░рдЕрд╕рд▓, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЕрдзрд┐рдХрд╛рдВрд╢ рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд░реЛрдЪрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗрдм рд▓рд╛рдл - рдПрдХ рдЕрд▓рдЧ рдкреВрд░реНрдг рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╢реБрджреНрдз-рдЬрд╛рд╡рд╛ рд▓рд╛рдл
- рдЕрддрд┐рд░рд┐рдХреНрдд рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ (рд╡реЗрдм тАЛтАЛрд▓рд╛рдПрдлрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) - рдлрд╛рдЗрд▓рд╢реЛрд╕рд░ / рдХрд▓рд░рдЪреЙрдЬрд╝рд░ / рдЧреИрд▓рд░реА / рдХреИрд▓реЗрдВрдбрд░ рдФрд░ рдХрдИ рдЕрдиреНрдп (рдПрдХ рдорд╣рд╛рди рдХрдИ!)
- рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ: рдЧреНрд░рд╛рдлрд┐рдХреНрд╕, рдлрд╝рд╛рдЗрд▓реЗрдВ, рдкрд╛рда, рдЪрд┐рддреНрд░ рдФрд░ рдХрдИ рдЕрдиреНрдп рдкрд╣рд▓реБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, URL рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдХрд░рдирд╛, рдЪрд┐рддреНрд░ рдкрдврд╝рдирд╛, рдЙрдирдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдСрдкрд░реЗрд╢рди, рдЖрджрд┐)
рдпрд╣рд╛рдБ рднреА рдХреБрдЫ рддрдХрдиреАрдХреА "рд▓рд╛рдн" рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
- рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ (рд╕реАрдзреЗ - рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреА / рд╡рд┐рд╕реНрдЯрд╛ / 7, рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ 10.6.7, рдЙрдмрдВрдЯреВ 9/11 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)
- рдиреНрдпреВрдирддрдо рдореЗрдореЛрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ (-Xms16m -Xmx16m рдкрд░ рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рднрд╛рд░реА рд╕рдВрдЪрд╛рд▓рди рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓рд╛рдл рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдХрд╛рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)
- рд╕рд┐рдВрдЧрд▓-рдЬрд╛рд░ рдмрдВрдбрд▓ - рдЕрд░реНрдерд╛рдд, рдЖрдкрдХреА рдЬрд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдЬрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рд╕рднреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИ
- JDK 1.6 рдЕрдкрдбреЗрдЯ 20 рдФрд░ рдирдП рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореИрдВ рдЕрднреА рддрдХ JDK 7 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ - рдореИрдВрдиреЗ рдЗрд╕рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)
рдЖрдк рдПрдХ
рдЕрд▓рдЧ рд╕рд╛рдЗрдЯ рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдПрдХ рддрд░рд╣ рдХреА "рд╕рд╛рдЗрдХрд┐рд▓" рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддреА рд╣реИ рдФрд░ рдХреЛрдИ рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрдп рдкреНрд░рд╕рд┐рджреНрдз рдХрдВрдкрдирд┐рдпреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ ...
рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рджреЛ рдмрд╛рддреЗрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ , рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рдЗрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде (рдФрд░ рдЕрдХреНрд╕рд░ рдмреИрд╕рд╛рдЦреА рдХреЗ рд╕рд╛рде)ред рдЙрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ WebLaF рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ред
рджреВрд╕рд░реА рдмрд╛рдд - рдХреБрдЫ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдЬреЛрдбрд╝рд╛ рдФрд░ рдмрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╡рд┐рд╢рд╛рд▓рддрд╛ рдореЗрдВ ColorChooser рдХрд╛ рдПрдХ рднреА рд╕рдордЭрджрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ , рдЬреЛ рднрдпрд╛рд╡рд╣ JColorChooser рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдИ рдЕрдиреНрдп JFileChooser рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИрдВред рдмреЗрд╢рдХ рд╡рд╣рд╛рдБ рдПрдХ SWT рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ, рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рдФрд░ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рдФрд░ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдБ - рдпрд╣ рд╕рдм, рд╣рдо рд╕реНрд╡рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВредрдЗрд╕рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдШрдЯрдХреЛрдВ рдХреЛ "рдорд╣рд╕реВрд╕" рдХрд░рдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреВрд░реНрдг рдШрдЯрдХреЛрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рд╛:
(рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ )рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рд╡рд┐рддрд░рдг рдХрд┐рдЯ рд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИредhttp://weblookandfeel.com/download/рдлрд┐рд▓рд╣рд╛рд▓, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрднреА рддрдХ рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдФрд░ рдХреЛрдб рдореЗрдВ рд▓реБрдХрдПрдВрдб рдлрд╝реАрд▓, "рдЕрдирдкреЗрдХреНрд╖рд┐рдд" рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдорд╛рдореВрд▓реА рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд "рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж" рдмрдиреА рд╣реБрдИ рд╣реИ рдФрд░ рдЕрднреА рднреА рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрдХреНрд╖редрдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА, рд╕реБрдЭрд╛рд╡ рдФрд░ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рд╕реБрдирдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА :)рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ ...
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рдЬрд╛рд╡рд╛ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдкрдХрд╛ рдЬреНрдЮрд╛рди рдереЛрдбрд╝рд╛ рд╕рдВрд░рдЪрд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрдзрд┐рдХ рдореВрд░реНрдд рдФрд░ рд▓рд╛рдЧреВ рд╣реЛ рдЧрдпрд╛ рд╣реИредрдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд WebLookAndFeel рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдИ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддреЗрдВ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдирдХ рд╕реНрд╡рд┐рдВрдЧ рдШрдЯрдХреЛрдВ, рд▓реБрдХрдПрдВрдб рдлрд╝реАрд▓, рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рдмрдВрдзрдХреЛрдВ, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдпреВрдЖрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди), рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ (рдпрджрд┐ рдЖрдк рд╕рдордп рдФрд░ рдЗрдЪреНрдЫрд╛ рд░рдЦрддреЗ рд╣реИрдВ) рдЬрд░реВрд░)редрдореИрдВ рд▓реЗрдЦреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рдмреНрд░реЗрдХ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ - рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрдЧреНрд░рд╣, рдЕрдлрд╕реЛрд╕, рдореБрдЭреЗ рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрд╛, WebLaF рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПредрдЕрдЧрд▓рд╛ рд▓реЗрдЦ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд▓реБрдХрдПрдВрдбрдлреАрд▓ (рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде), рдФрд░ рд╕рд╛рде рд╣реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЬреЗ-рдШрдЯрдХреЛрдВ рдХреА рдпреВрдЖрдИ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдВрдЧреЗредрд╕рд╛рдзрди
рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рднрд┐рдиреНрди рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рдВрд╕рд╛рдзрди:(рд▓реЗрдЦ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд▓реЛрдЧреЛрдВ рд╕рд╣рд┐рдд)MVChttp://lib.juga.ru/article/articleview/163/1/68/рдЖрдХреГрддрд┐рдпрд╛рдБhttp://java.sun.com/developer/technorArticles/GUI/ java2d / java2dpart1.htmlhttp://www.datadisk.co.uk/html_docs/java/graphics_java2d.htmрд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЖрдХреГрддрд┐рдпрд╛рдБhttp://java-sl.com/shapes.htmlhttp://geosoft.no/graphics/http : //designervista.com/shapes/index.phphttp://www.jfree.org/j рдЕрд╕рд╛рдорд╛рдиреНрдп /рд╕рдордЧреНрд░http://download.oracle.com/javase/tutorial/2d/advanced/compositing.htmlBasicStrokehttp: // /www.projava.net/Glava9/Index13.htmрд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реНрдЯреНрд░реЛрдХhttp://www.jhlabs.com/java/java2d/strokes/рдзреБрдВрдзрд▓рд╛http://www.jhlabs.com/ip/blurring.htmlWebLookAndFeel рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВ:java-image- scalinghttp://code.google.com/p/java-image-scaling/TableLayouthttp: // javaред рдиреЗрдЯ / рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ / рдЯреЗрдмрд▓-рдЖрдЙрдЯрдбреЗрдЯрд╛ рдЯрд┐рдкреНрд╕рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВрдЬреЗрд░рд┐рдХреЛ рдПрдЪрдЯреАрдПрдордПрд▓ рдкрд╛рд░реНрд╕рд░http://jericho.htmlparser.net/docs/index.htmlрдФрд░ рдЖрдЗрдХрди рд╕реЗрдЯ:рдлреЙрдЧ рдЖрдЗрдХрдиреНрд╕http://code.googleред com / p / fugue-icons-src /Fatcow рдЖрдЗрдХрдиреНрд╕http://www.fatcow.com/free-iconsрд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж ...
рдкрдардиреАрдп рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ :http://virtser.net/blog/post/source-code-highlighter.aspxрдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдореЗрдЬ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ :http://hostingkartinok.com/Update1, рд▓рд┐рдВрдХ рдХреЛ рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд┐рдпрд╛ рдФрд░ рдЪрд┐рддреНрд░ рдЕрджреНрдпрддрди2: рд╡рд┐рднрд┐рдиреНрди рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рддрд░рдг рдЕрджреНрдпрддрди 3 рдХрд╛рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛: рд▓реЗрдЦ рдореЗрдВ рдЧрд▓рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдФрд░ рдХреБрдЯрд┐рд▓ рдЫрд╡рд┐рдпрд╛рдВ