![](https://habrastorage.org/storage/f819d4de/cd76ab22/c4830063/a6efd941.png)
ã€ã³ã¿ãŒãããäžã§Swingãšã°ã©ãã£ãã¯ã¹ãæäœãããããã¯ãããã³Javaã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã®ãããã¯ã«ã¯ãéåžžã«å€ãã®æçåãããæ å ±ãååšããŸãã Javaã¯æ代é ãã§ãããJavaãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã¯æå³ããªããªããšèª°ãã䞻匵ãã泡ãå£ã«ãã人ã¯ãã®å察ã蚌æããŸãã åæã«ãäœæ¥ãé²è¡äžã§ãã¢ããªã±ãŒã·ã§ã³ãäœæãããŠãããä»ã®åé¡ãçºçããŠããŸãã ååã®èšäºã§ãäŸå€çãªã±ãŒã¹ã«åœ¹ç«ã€äŸ¿å©ãªã©ã€ãã©ãªã®ãªã¹ããæ¢ã«ç€ºããŸãããããµãŒãããŒãã£ã®ã©ã€ãã©ãªã§ã¯å¿ èŠãªããšãå®è¡ã§ããªãããšããããããŸãã ãã®ãããªç¬éã«ãç¬èªã®ã³ã³ããŒãã³ããäœæããå¿ èŠæ§ã«ã€ããŠèããå¿ èŠããããŸãã
ãããã£ãŠããã®æçš¿ã§ã¯ãSwingãšã°ã©ãã£ãã¯ã¹ã®æäœã«é¢ããç§ã®æèŠã§æãéèŠã§éèŠãªç¬éãè¿°ã¹ãããšããŸãã-ã³ã³ããŒãã³ããäœæããæ¹æ³ãããããã®ãªãã€ã³ã¿ãŒãã§ãŒã¹ãæ§åŒåããæ¹æ³ãªã©...
é²ã«ãããã
ãããªãã®ã¢ããªã±ãŒã·ã§ã³ã®ãã¶ã€ã³ãæããæãåºæ·±ããã®ã«ããæ¹æ³ããšãJavaã§ãããå¯èœã«ããæ¹æ³ããšãã質åã«ãã£ãŠãå€ãã®äººã ãJavaã§ã®ç 究ãéçºã劚ããããŠãããšæããŸããå°ãªããšãéšåçã«ç¶æ³ãæããã«ããŸãã
ãããã£ãŠãä»æ¥ã¯ãããã®è³ªåã«çããŠããã°ã¬ãŒãã€ã³ã¿ãŒãã§ãŒã¹ãã³ã³ããŒãã³ãã®æ¬ åŠããæãããã¶ã€ã³ãããã³éçºè ãããããééãããã®ä»ã®ããšã«ã€ããŠã®å¹»æ³ãææããããšããŸãã 確ãã«ãååãªåµæ工倫ãçããèŠã€ããããšãã欲æ±ãæã£ãŠããªã-ããã¯äœãèµ·ãããŸããã ããããããã¯ãŸãã«ãã®èšèªã«ç§ãæ¹ãã€ãããã®ã§ãããªããªããååãªç¥èãšãããã«éèŠãªããšãšããŠã欲æ±ãããã°ãããªãã«å¿ èŠãªãã®ãçŽ æ©ãç°¡åã«å®çŸããããšãã§ããããã§ãã
äœããããŸããïŒ
ããããåºæ¬ããå§ããŠããããéèŠãªäºé ãã«ã€ããŠè°è«ããããšããå§ãã䟡å€ãããã§ãããã
SwingãLaFã®ãããªãã®ãšããããã©ã®ããã«é 眮ãããŠããããããç¥ã£ãŠããå Žåã¯ãç¡é§ã«æéãç¡é§ã«ãããããã«ãããã¯ã®æ¬¡ã®ç« ã«é²ãããšããå§ãããŸãã
ãã®ãããJavaã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã®æ§ç¯ã¯Swingã©ã€ãã©ãªã«åºã¥ããŠããŸãããã®ã©ã€ãã©ãªã«ã¯ãããŸããŸãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«å«ãŸãããã¹ãŠã®åºæ¬ã³ã³ããŒãã³ããå«ãŸããŠããŸãã ãããã¯ç°ãªã£ãŠèŠãããããããããããã«ç°ãªãæ©èœçç¹åŸŽãæã£ãŠãããããããŸããïŒç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã äžã§ïŒããæ¬è³ªçã«ã¯ãåãç®çãæãããŸãã ãããã¯ããã¿ã³ïŒJButtonïŒãããã¹ããã£ãŒã«ãïŒJTextFieldãJPasswordFieldïŒãã©ãã«ïŒJLabelïŒãããã¹ãé åïŒJTextAreaãJEditorPaneïŒãã¹ã¯ããŒã«ïŒJScrollBarãJScrollPaneïŒãªã©ã®ã³ã³ããŒãã³ãã§ãã
ãåºæ¬æ§æãã§ã®ã¹ã€ã³ã°ã«ãããè€æ°ã®ç°ãªãLaFïŒã«ãã¯ã¢ã³ããã£ãŒã«ããã¹ã€ã³ã°ã¹ãã³ããšåŒã¶ããšãã§ããŸãïŒã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ã³ã³ããŒãã³ãã®å€èŠ³ããäžåºŠã«ãå€æŽã§ããŸã-Metal LaFïŒæšæºJavaã¹ã¿ã€ã«ïŒãNimbus LaFïŒåå¥ã®ç¹å®ã®ã¹ã¿ã€ã«ïŒãSystem LaFïŒOSã®ã¹ã¿ã€ã«ïŒã ãã ãããã¹ãŠã®ãããžã§ã¯ãã§ç°¡åãã€è¿ éã«äœ¿çšã§ããå®å šãªã©ã€ãã©ãªã§è£ 食ãããå€æ°ã®åå¥ã«äœæãããLaFããããŸãã
åã ã®ã³ã³ããŒãã³ãã¯ãããããã¬ã³ããªã³ã°æ¹æ³ã決å®ããUIã¯ã©ã¹ãæå®ããããšãã§ããŸããå Žåã«ãã£ãŠã¯ãã©ã®æ©èœã䜿çšãããã¯ããã¹ãŠå®è£ ã«äŸåããŸãã LaFèªäœã¯ãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšå¯èœãªã³ã³ããŒãã³ãã®ããªãŒå šäœã®UIãããã«å®çŸ©ããŸãã LaFã䜿çšããããUIãèšå®ããŠåã ã®ã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãå€æŽãããã§ããŸãã ç¹å®ã®LaFïŒã·ã¹ãã ãªã©ïŒãèšå®ããå¿ èŠã«å¿ããŠåã ã®èŠçŽ ã®UIãå€æŽããããšãã§ããŸãã
ããŸããŸãªã«ã¹ã¿ã LaFãåãããªãœãŒã¹ãããã€ã玹ä»ããŸãããããã®ãªãœãŒã¹ã¯ãããã«äœ¿çšã«é©å¿ã§ããŸãã
æãæåã§ç²Ÿå·§ãªã¹ã¿ã€ã«ã®ããã€ã
Tiny LaF -Windows XPã®ã¯ã©ã·ãã¯ã¹ã¿ã€ã«ã®é¡äŒŒç©
![](https://habrastorage.org/storage/e6b9fb0c/07cb4454/b136c827/8787d77b.png)
Quaqua LaF-ã³ã³ããŒãã³ããã«ã¹ã¿ãã€ãºããããã®å€ãã®æ©èœãåããMac OS Xã€ã³ã¿ãŒãã§ãŒã¹ã®é¡äŒŒç©
![](https://habrastorage.org/storage/2dffad54/4619488b/e9e08a7a/38008ffa.png)
ãµãã¹ã¿ã³ã¹ã©ã
![](https://habrastorage.org/storage/3fc0fb9e/ec12b77c/185806ae/d0bf3222.png)
![](https://habrastorage.org/storage/ea06c707/a75a0303/ac097112/964deef7.png)
ã·ã³ã»ãã£ã«ã©ã
![](https://habrastorage.org/storage/aba4120a/a9d4ea03/7a740e51/6e3d44b1.png)
![](https://habrastorage.org/storage/f292ff4e/3279b359/51f67bf4/f3b083fc.png)
ã¢ãã€ã©ã
![ç»å](https://habrastorage.org/getpro/habr/post_images/79e/5fa/bdc/79e5fabdc87359f5931686e13b12c694.png)
Jgoodies
![](https://habrastorage.org/storage/04bc3887/26519af7/d9be4987/dfa9c852.png)
è€æ°ã®ã¹ã¿ã€ã«ã»ãã
ã»ããïŒ1-æåãªããŸããŸãªLaF for Javaã¢ããªã±ãŒã·ã§ã³å°çšã®ãµã€ã
ã»ããïŒ2-ããŸããŸãªLaFã®ãªã¹ããå«ãå°ããªèšäº
ã»ããïŒ3-å¥ã®LaFèšäº
ãã¹ãŠã®LaFãã©ã®OSã§ã䜿çšã§ããããã§ã¯ãªãããšã«æ³šæããããšãéèŠã§ãã Quaqua LaFãªã©ãç¹å®ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ç¹åãããã®ããããŸãã ãã¡ãããWindowsãŸãã¯Linuxã§å®è¡ã§ããäžèŠåé¡ã¯ãããŸããããäžéšã®ã³ã³ããŒãã³ãã¯JVMã¯ã©ãã·ã¥ãŸã§ã®æäœäžã«ãšã©ãŒãåŒãèµ·ããå¯èœæ§ããããŸãã ä»ã®ã¹ã¿ã€ã«ã®äžã«ã¯ãæå³ããªãOSã§èµ·åããªããã®ããããŸãã äžéšã®ã¹ã¿ã€ã«ã¯ãã©ã€ã»ã³ã¹å¥çŽã«åºã¥ããŠç¹å®ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§äœ¿çšããããšãçŠããããŠããŸãã
ãµãŒãããŒãã£ã®éçº
å®è·µã瀺ãããã«ããã¹ãŠãå®å šã«ãŒãããè¡ãããå Žåããã¹ãŠã®ã³ã³ããŒãã³ããé çªã«ææ°ã®ç¶æ ã«éçºããã³ç¶æããããã®ååãªãšãã«ã®ãŒãè³éããåŸãããŸããã ãããã£ãŠãäœããã®æ¹æ³ã§ããµãŒãããŒãã£ã®ã©ã€ãã©ãªã®å©ãã«é Œããªããã°ãªããŸããã 䜿çšå¯èœãªæ©èœã«å®å šã«äŸåã§ããå Žåãããã°ãå®å šã«èªåã«åã£ãŠããå Žåã¯ãã©ã€ãã©ãªã®æãæåããéšåãèªåã®ç®çã«äœ¿çšããã®ãç°¡åãªå ŽåããããŸãã
ãããã£ãŠãã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®èšè¿°/å€æŽã®ææžãã®èª¬æã«é²ãåã«ãå©çšå¯èœã§ãµããŒããããããªã人æ°ã®ããã©ã€ãã©ãªãæäŸããããšã¯è«ççã§ãããšèããŸãã ããã§ã¯ããã®åéã§ã©ã®ãããªéçºãååšããã®ããèŠãŠã¿ãŸãããïŒãããã®ãµã€ãã«ã¢ã¯ã»ã¹ããŠç¢ºèªããããšããå§ãããŸãïŒã
SWT ïŒ ãµã€ã ïŒïŒ ããã¥ã¢ã«/ãã㯠ïŒïŒ äŸ ïŒïŒ ããŠã³ããŒã ïŒ
ã©ã€ã»ã³ã¹ïŒEPL
ãµããŒããããŠãããã©ââãããã©ãŒã ïŒWindows / Linux / MacOSX / Solarisãªã©
SWTã¯ãããŸããŸãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãã€ãã£ãã³ã³ããŒãã³ãã䟿å©ã«äœ¿çšããããã®ã©ãããŒã§ãã Swingã³ã³ããŒãã³ããšSWTã³ã³ããŒãã³ããçŽæ¥çµã¿åãããããšã¯ã§ããŸãããããã®ããã«èšèšãããããã€ãã®ã©ã€ãã©ãªããããŸãïŒããšãã°ã ãã ïŒã
SwingX ïŒ ãµã€ã ïŒïŒ ããã¥ã¢ã«/ãã㯠ïŒïŒ ããŠã³ããŒã ïŒ
ã©ã€ã»ã³ã¹ïŒLGPL 2.1
ãµããŒãããããã©ãããã©ãŒã ïŒãã¹ãŠã®JavaãµããŒããã©ãããã©ãŒã
Swingã³ã³ããŒãã³ãã®æ¡åŒµã»ãããåãããããªãå€ããŠæåãªã©ã€ãã©ãªã çŸæç¹ã§ã¯ããããžã§ã¯ãã¯äœããã®ç§»è¡æã«ãããŸãã
Jide ïŒ ãµã€ã ïŒïŒ ããã¥ã¢ã«/ãã㯠ïŒïŒ ãã¢ãããŠã³ããŒã ïŒ
ã©ã€ã»ã³ã¹ïŒåçš/ GPLãã¯ã©ã¹ãã¹äŸå€ãã
ãµããŒãããããã©ãããã©ãŒã ïŒãã¹ãŠã®JavaãµããŒããã©ãããã©ãŒã
å¹ åºãããŸããŸãªã³ã³ããŒãã³ããæäŸããæé«ã®åçšã©ã€ãã©ãªã®1ã€ã
ãªãã·ã§ãã«
ããããã 以åã®èšäºã§èšåããã©ã€ãã©ãªã¯ãããè€éãªèŠçŽ ïŒãã©ãã·ã¥/ãããªãªã©ïŒã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãéçºããã®ã«åœ¹ç«ã€ã§ãããã ç§ã¯ããã€ãã®ãããžã§ã¯ãã§äœ¿çšããå¥ã®ã©ã€ãã©ãª-JavaLayer-ã®ã¿ãè¿œå ã§ããŸããããã«ãããmp3ãã¡ã€ã«ãšmp3-streamsãåçã§ããŸãã 䜿ããããããã€ãã£ããªãã®ãå¿ èŠãšãããã¯ãã¹ãã©ãããã©ãŒã ã§ããã·ã³ã®ãªãœãŒã¹ãæ¶è²»ããŸããã
ãã¡ãããä»ã«ãããã€ãã®ã©ã€ãã©ãªïŒåçšãšç¡æã®äž¡æ¹ïŒããããŸããããããã¯å€ããªã£ãŠããããæçšãªãã®ãã»ãšãã©å«ãŸããŠããŸããã ã ãããããªãã¯ãã§ã«LaFã䜿çšã§ããããèŠãŠãããã¯ç°ãªãã©ã€ãã©ãªã«ç°ãªãæ¢è£œã®ã³ã³ããŒãã³ãããããŸãããæçµçã«ã¯ããªãã¯ãŸã æºè¶³ããŠããŸãã-ã³ã³ããŒãã³ãã®ããã€ãã¯ããªããæãããã«ééã£ãã¹ã¿ã€ã«ãæã£ãŠããŸããã©ã€ãã©ãªã¯ãã§ã«10åå€ããªã£ãŠããŸããèŽåœçã§ãã©ã€ãã©ãªå ã®ãšã©ãŒããµããŒãã¯ã¹ã©ãã¯ãäžããŸã...ã©ãããã°ããã§ããïŒ ééããªãã1人ã®ç¡æã®ãã¶ã€ããŒãšã³ãŒããèªåã®æã«æž¡ããŠãã ããïŒ..
ã§ããããæåã«ãæ·±åŒåžãããŠãæ¯ãåããèœã¡çããŠãã ãã-ã³ã³ããŒãã³ããæžãããšã«äœã®åé¡ããããŸããã ããã¯å®å šã«èªèãããªããã°ãªããŸããã ãŸããç¹å®ã®ã³ã³ããŒãã³ããŸãã¯UIãäœæããæéã¯ããã®è€éããèšèšè ã®äœæ¥ã®è€éããããã³Javaããã°ã©ããŒãšããŠã®ç¥èã®ã¿ã«äŸåããããšãèªèããå¿ èŠããããŸãã ãŸããæ確ãªå¢çããããŸã-ãããè¡ãå Žåãšããªãå Žå-ããã¯ã¿ã€ãã³ã°ãå©çšå¯èœãªãªãœãŒã¹ãããã³ãã®ä»ã®ããç¥ãããŠããªãèŠå ã«äŸåããŸãããããã¯å®å šã«ç°ãªããããã¯ã§ãã ã ãããç§ã¯ä»ããªããç¶ããæºåãã§ããŠãããšæããŸãã
UIãæžã
ãŸãããã®æç¹ã§å°ãæéãããããŸããããã€ãã®ããªãããŒãªã³ã³ããŒãã³ããåžžã«å¿ èŠãªããã§ã¯ãªããå®ååãããæšæºçãªã³ã³ããŒãã³ãã ããã§ãã ãã®ãããªå Žåãç¹ã«ãã¹ãŠã®æšæºSwingã³ã³ããŒãã³ãã«ã¯äŸå€ãªããã³ã³ããŒãã³ãã®ç¬èªã®ã¹ã¿ã€ã«ããã°ããç°¡åã«äœæã§ããBasic-UIã¯ã©ã¹ããããããJã³ã³ããŒãã³ãã®å°ããªUIã¯ã©ã¹ãèšè¿°ããããšã«é Œãå¿ èŠããããŸãã JSliderã®UIãäœæããå°ããªäŸã瀺ããŸãã
æåã«ãBasicSliderUIããªãŒããŒã©ã€ãããã¯ã©ã¹ãäœæãããã®å€èŠ³ãæ¢åã®ç»åã§èšè¿°ããŸãã
ã芧ã®ãšãããã¬ã³ããªã³ã°ã«å¿ èŠãªå€æ°ã¯ãã¹ãŠBasic-UIã¯ã©ã¹ã«ãããçŽæ¥äœ¿çšã§ããŸããpublic class MySliderUI extends BasicSliderUI
{
public static final ImageIcon BG_LEFT_ICON =
new ImageIcon ( MySliderUI. class .getResource ( "icons/bg_left.png" ) );
public static final ImageIcon BG_MID_ICON =
new ImageIcon ( MySliderUI. class .getResource ( "icons/bg_mid.png" ) );
public static final ImageIcon BG_RIGHT_ICON =
new ImageIcon ( MySliderUI. class .getResource ( "icons/bg_right.png" ) );
public static final ImageIcon BG_FILL_ICON =
new ImageIcon ( MySliderUI. class .getResource ( "icons/bg_fill.png" ) );
public static final ImageIcon GRIPPER_ICON =
new ImageIcon ( MySliderUI. class .getResource ( "icons/gripper.png" ) );
public static final ImageIcon GRIPPER_PRESSED_ICON =
new ImageIcon ( MySliderUI. class .getResource ( "icons/gripper_pressed.png" ) );
public MySliderUI ( final JSlider b )
{
super ( b );
//
b.addChangeListener ( new ChangeListener()
{
public void stateChanged ( ChangeEvent e )
{
b.repaint ();
}
} );
b.addMouseListener ( new MouseAdapter()
{
public void mousePressed ( MouseEvent e )
{
b.repaint ();
}
public void mouseReleased ( MouseEvent e )
{
b.repaint ();
}
} );
}
//
protected Dimension getThumbSize ()
{
return new Dimension ( GRIPPER_ICON.getIconWidth (), GRIPPER_ICON.getIconHeight () );
}
//
public void paintThumb ( Graphics g )
{
int positionX = thumbRect.x + thumbRect.width / 2;
int positionY = thumbRect.y + thumbRect.height / 2;
g.drawImage ( isDragging () ? GRIPPER_PRESSED_ICON.getImage () : GRIPPER_ICON.getImage (),
positionX - GRIPPER_ICON.getIconWidth () / 2,
positionY - GRIPPER_ICON.getIconHeight () / 2, null );
}
// «»
public void paintTrack ( Graphics g )
{
if ( slider.getOrientation () == JSlider.HORIZONTAL )
{
//
g.drawImage ( BG_LEFT_ICON.getImage (), trackRect.x,
trackRect.y + trackRect.height / 2 - BG_LEFT_ICON.getIconHeight () / 2, null );
g.drawImage ( BG_MID_ICON.getImage (), trackRect.x + BG_LEFT_ICON.getIconWidth (),
trackRect.y + trackRect.height / 2 - BG_MID_ICON.getIconHeight () / 2,
trackRect.width - BG_LEFT_ICON.getIconWidth () - BG_RIGHT_ICON.getIconWidth (),
BG_MID_ICON.getIconHeight (), null );
g.drawImage ( BG_RIGHT_ICON.getImage (),
trackRect.x + trackRect.width - BG_RIGHT_ICON.getIconWidth (),
trackRect.y + trackRect.height / 2 - BG_RIGHT_ICON.getIconHeight () / 2, null );
//
g.drawImage ( BG_FILL_ICON.getImage (), trackRect.x + 1,
trackRect.y + trackRect.height / 2 - BG_FILL_ICON.getIconHeight () / 2,
thumbRect.x + thumbRect.width / 2 - trackRect.x - BG_LEFT_ICON.getIconWidth (),
BG_FILL_ICON.getIconHeight (), null );
}
else
{
// jar'
}
}
}
thumbRect-ã€ã³ãã«ãšã³ã¶ã®é·æ¹åœ¢
trackRect-ã¹ã©ã€ããŒã®ããã¹ãã®é·æ¹åœ¢
å®éãå¿ èŠãªåæç»ã®ã»ãšãã©ã¯Basic-UIã¯ã©ã¹èªäœãåå ã§ãããå¿é ããå¿ èŠã¯ãããŸããïŒããšãã°ããã¬ãŒããŒãã¯ãªãã¯ããããã©ãã°ãããããå ŽåïŒã
ãã®UIã§ã¯ãã¹ã©ã€ããŒã®ããã¹ãã®å€§ããã決å®ããcalculateTrackRectïŒïŒã¡ãœãããå°ãæ¹ããããåå®çŸ©ããŸããã§ããã ã¬ã³ããªã³ã°ãããç»åã䜿çšå¯èœãªãµã€ãºã®äžå€®ã«åãããŸããã ããããããã¯å¥œã¿ã®åé¡ã§ãã ãã1ã€ã®è³ªåã¯ã奜ãŸãããµã€ãºãã€ã³ãã«ãšã³ã¶ã®ãµã€ãºãšãã¹ã«åºã¥ããŠèšç®ãããããšã§ãããã®å Žåãã€ã³ãã«ãšã³ã¶ã¯ãã¹ãããã¯ããã«å€ããªããŸãã
ãã®ããããã®ãããªç°¡åãªæ¹æ³ã§ããŸã£ããæ°ããå€èŠ³ã®ã¹ã©ã€ããŒãã§ããŸããã ãããã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããã«ã¯ãJSliderã®UIãšããŠèšå®ããŸãã
ãããŠãããã«ãã®ãããªæ§åŒåãããã¹ã©ã€ããŒããããŸãïŒJSlider mySlider = new JSlider ();
mySlider.setUI ( new GuiSliderUI ( mySlider ) );
![](https://habrastorage.org/storage/35b3f83a/b945c063/4b5a5e38/e951c9df.png)
ãµã³ãã«ãšã°ã©ãã£ãã¯ãå«ãå®å šãªã³ãŒãã¯ããã§ååŸã§ããŸã ïŒã¹ã©ã€ããŒã®åçŽããŒãžã§ã³ãå®è£ ããŸããå ã®Javaã¯ã©ã¹ã¯jarå ã«ãããŸãïŒã
ãã¡ãããåã ã®Basic-UIïŒBasicButtonUIãBasicTextFieldUIãBasicTableUIãBasicTabbedPaneUIãªã©ïŒã«ã¯ãã³ã³ããŒãã³ãããŒããã¬ã³ããªã³ã°ããç¬èªã®ç¹æ§ããããŸãããç¹ã«JDKãœãŒã¹ã³ãŒãã§äœ¿çšå¯èœãªãã¹ãŠã®ã¡ãœãããéåžžã«è©³çŽ°ã§ãããããããã«è€éãªãã®ã¯ãªãããããææ¡ããããšã¯é£ãããããŸããã³ã¡ã³ããšèª¬æã
UIã«ã€ããŠã®äŒè©±ãè«ççã«ç· ããããããã«ãBasic-UIã«å ããŠãæ¢ç¥ã®ãã¹ãŠã®Jã³ã³ããŒãã³ãã«ã€ããŠãWindowsSliderUIãMetalSliderUIãªã©ãããŸããŸãªLaFã®å®è£ ãããããšãè¿œå ããŸãã éåžžãã©ã€ãã©ãªã®ååãŸãã¯ãã®ç®çïŒãã€ãã£ãOSã³ã³ããŒãã³ãã®å Žåãããšãã°OsnameComponentUIïŒã«åŸã£ãŠåŒã³åºãããŸãã æã ãå ±éã®LaFãã€ã³ã¹ããŒã«ããã«ãããã䜿çšããããšãã§ããŸãããåžžã«ã§ã¯ãããŸãã-å¯èœãã©ããã¯ãçŽç²ã«ã©ã€ãã©ãªã®å®è£ ã«äŸåããŸãïŒããšãã°ãLaFãã€ã³ã¹ããŒã«ããå Žåãã¹ã¿ã€ã«ã¯åå¥ã®UIãåäœããªãå Žåã«ããŒããããŸãïŒã
ãããã£ãŠããã®äŸã§ã¯ãæ¢è£œã®ã°ã©ãã£ãã¯ã¹ã䜿çšããŠãã¡ããšããèŠèŠã³ã³ããŒãã³ããäœæããŸããããæšæºã®JavaããŒã«ãŸãã¯Graphics2DããŒã«ã®ã¿ã䜿çšããŠåªããèŠèŠã³ã³ããŒãã³ããæç»ã§ããŸã-ããã«ã€ããŠã¯åŸã§èª¬æããŸã...
Graphics2Dã䜿çšãã
äžèšã®ç« ã§ãã°ã©ãã£ãã¯ã¹ã®æäœã«ã€ããŠäœæ°ãªãèšåããŸããããã¹ã©ã€ããŒã®åã ã®éšåãæç»ãããã®ã¯ãŸãã«ãã®æå³ã§ã§ããã ããããããã¯Grahics2DãæäŸããå¯èœæ§ã®ãŸãã«æäžéšã«ãããŸããã
ãpaintãã®ãã¹ãŠã®ã¡ãœããïŒããã³ãpaintComponentãããprintããªã©ïŒã«ã¯Grahics2Dã§ã¯ãªãã°ã©ãã£ãã¯ã¹ãå«ãŸããŠããŸãããJã§äœæ¥ããŠããã°ãGrahics2Dã«ãã£ã¹ãããããšãæããããšã¯ã§ããŸãããã³ã³ããŒãã³ããŸãã¯ãã®åŸç¶ã ããã¯ãªãã§ããïŒ ãããã¯ãããã°ãSwingãè²ã£ãå€ãéšåã®å°ããªæ®éªžã§ãããçŸæç¹ã§æ·±ãæãäžãã䟡å€ã¯ãªããšæããŸãã ãã®åé¡ã®è©³çŽ°ã«ã€ããŠã¯ãSwingå éšããã€ã¹ã«é¢ããSkipyã®èšäºãã芧ãã ãã ã
ãŸãããã®ç« ã§ã¯ãã°ã©ãã£ãã¯ã¹ã䜿çšããããã®ãªãã·ã§ã³ãããã€ãããããšãããã«èšããŸããå®éããã®ç¯å²ã¯ã¯ããã«åºãã§ãã ã°ã©ãã£ãã¯ã¹ãšããã«é¢é£ãããã¹ãŠã®è©³çŽ°ã«ã€ããŠã¯ãããããJavaã«é¢ãã次ã®ããŒãã®ãããã¯ã§èª¬æããŸãïŒãã¡ããããã®çµæãšèªè ã®éã§ã®é¢å¿ã®é«ãŸãããããŸãïŒã ãããããããã¯ã«æ»ã£ãŠãååãªãã¿ãã¬...
ã§ã¯ãäœããããŸããïŒ Graphics2Dã¯ã©ã®ãããªæ©èœãæäŸããŸããïŒ
äž»ãªãã®ããªã¹ãããŸãã
- ããªããã£ããã©ãŒã ïŒæ¥åãé·æ¹åœ¢ãå匧ãæ²ç·ãå€è§åœ¢ãªã©ïŒã䜿çšãã
- ããã¹ãã®æäœ ïŒæç»ãããã¹ããµã€ãºã®ã«ãŠã³ããªã©ïŒ
- ç»åã®æäœ ïŒãã©ã³ããã¬ã³ããªã³ã°ãã¹ã±ãŒã«ãå€æŽãªã©ã®æäœïŒ
- æç»ããã圢ç¶/ãã©ãŒã ã®å¡ãã€ã¶ããã«ã¹ã¿ãã€ãºããæ©èœ
- ã¹ãããŒã¯ãã«ã¹ã¿ãã€ãºããæ©èœ
- ã¬ã³ããªã³ã°ããããªããžã§ã¯ããå€æããæ©èœ ïŒå転ãæ¡å€§çž®å°ãããæãå¹³è¡ç§»åïŒ
- ã¬ã³ããªã³ã°ãç¹å®ã®é åã«å¶éããæ©èœ ïŒã¯ãªããïŒ
- ãåæãã°ã©ãã£ãã¯ã¹ã®ããŸããŸãªã¢ãŒããæ§æããæ©èœ ïŒåæïŒ
- ã¬ã³ããªã³ã°å質ãã«ã¹ã¿ãã€ãºããæ©èœ ïŒã¬ã³ããªã³ã°ãã³ãïŒ
- å°å·ãªãã·ã§ã³
ç§ã¯ããã«èšããŸã-ã°ã©ãã£ãã¯ãæ±ããšãããããããæéã®çµéãšãšãã«ãæé«ã®èŠèŠå¹æãéæããããã«ãäŸå€ãªããæäŸããããã¹ãŠã®ããŒã«ã䜿çšããå¿ èŠããããŸãã ããã§äœãã©ã®ããã«èŠã€ãããã®è©³çŽ°ãªèª¬æã¯ãå ¬åŒã®Graphics2Dãã¥ãŒããªã¢ã«ã§ãã ææ°ã®ç¶æ ã«ããã®ã«ååãªã¯ãã§ãã
UIãäœæããå°ããªäŸãæ¢ã«ç€ºããŸããããã€ã³ã¿ãŒãã§ã€ã¹ãã«ã¹ã¿ãã€ãºããããã®ä»ã®ãªãã·ã§ã³ããããŸãã åã ã®Jã³ã³ããŒãã³ãã¯ãpaintïŒïŒã¡ãœããã䜿çšããŠç¬èªã®è»œéã¬ã³ããªã³ã°ãçæããŸããããã¯ãç°¡åã«åå®çŸ©ããã³å€æŽã§ããŸãã çŽæ¥ïŒåžžã«ã§ã¯ãããŸããããã»ãšãã©ã®å ŽåïŒã䜿çšããªãæ¹ãè¯ãã§ãïŒããã¯å¥ã®ãããã¯ã®ãããã¯å šäœã§ããããã詳现ã«ã¯è§ŠããŸããïŒã 次ã®äŸã§ã¯ãpaintComponentïŒïŒã¡ãœããã䜿çšããŸãã ãããã©ã®ããã«è¿ãé©çšãããã®ãèŠãŠã¿ãŸããã...
äŸããå§ããŸããã-ã³ã³ãã³ãããªãå Žåã®èŠèŠçãªãã£ãŒãããã¯ãåããããã¹ããã£ãŒã«ãïŒ
å°å·ããŠãã£ãŒã«ãã§ãã©ãŒã«ã¹ã倱ããšãã³ã³ãã³ãã®ååšãå確èªãããŸãã å¥ã®ã³ã³ããŒãã³ãã«åãæ¿ãããšãJTextFieldãžã®è¿œå ãã©ã®ããã«ã¬ã³ããªã³ã°ãããããããããŸããJTextField field = new JTextField()
{
private boolean lostFocusOnce = false ;
private boolean incorrect = false ;
{
//
addFocusListener ( new FocusAdapter()
{
public void focusLost ( FocusEvent e )
{
lostFocusOnce = true ;
incorrect = getText ().trim ().equals ( "" );
repaint ();
}
} );
addCaretListener ( new CaretListener()
{
public void caretUpdate ( CaretEvent e )
{
if ( lostFocusOnce )
{
incorrect = getText ().trim ().equals ( "" );
}
}
} );
}
protected void paintComponent ( Graphics g )
{
super.paintComponent ( g );
//
if ( incorrect )
{
Graphics2D g2d = ( Graphics2D ) g;
//
g2d.setRenderingHint ( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON );
//
Insets insets;
if ( getBorder () == null )
{
insets = new Insets ( 2, 2, 2, 2 );
}
else
{
insets = getBorder ().getBorderInsets ( this );
}
//
GeneralPath gp = new GeneralPath ( GeneralPath.WIND_EVEN_ODD );
gp.moveTo ( insets.left, getHeight () - insets.bottom );
for ( int i = 0; i < getWidth () - insets.right - insets.left; i += 3 )
{
gp.lineTo ( insets.left + i,
getHeight () - insets.bottom - ( ( i / 3 ) % 2 == 1 ? 2 : 0 ) );
}
//
g2d.setPaint ( Color.RED );
g2d.draw ( gp );
}
}
};
![](https://habrastorage.org/storage/770e78df/1023a104/11e86122/d8a78ed9.png)
å®å šãªãµã³ãã«ã³ãŒãã¯ãã¡ãã«ãããŸã ã
ãããã£ãŠãåå¥ã®ããã°ãUIãæ¬æ Œçãªã³ã³ããŒãã³ããèšè¿°ããããšãªããã¬ã³ããªã³ã°ã¡ãœããããã°ãããªãŒããŒã©ã€ãããã³è¿œå ããããšã«ããã䜿çšå¯èœãªã³ã³ããŒãã³ããæ¡åŒµã§ããŸãã ããã«ããã®äŸãç°¡åã«å¥ã®ã¯ã©ã¹ã«é 眮ããã€ã³ã¿ãŒãã§ã€ã¹ã®æ¢è£œã®èŠçŽ ãšããŠäœ¿çšã§ããŸãã
ãã®æ¹æ³ã®ãã1ã€ã®å©ç¹ã¯ãçŸåšã€ã³ã¹ããŒã«ãããŠããã¢ããªã±ãŒã·ã§ã³/ã³ã³ããŒãã³ããšã¯ç¡é¢ä¿ã«LaF / UIãååŸã§ããããšã§ããããã¯åžžã«æ©èœããŸãã åœç¶ãäžéšã®ç¹å®ã®UIã§ã¯ãè¥å¹²ç°ãªãã¬ã³ããªã³ã°ãå¿ èŠã«ãªãå ŽåããããŸã-ããããµããŒããããã©ããã¯ããªã次第ã§ãã
ã€ã³ã¿ãŒãã§ãŒã¹ãããæããé åçã«ãããå ŽåããããããŸããããã®ããã«æ°ããã³ã³ããŒãã³ããçºæããå¿ èŠã¯å¿ ããããããŸãã-æšæºããŒã«ã䜿çšã§ããŸãã ç¶æ ãšèæ¯ã®ã¢ãã¡ãŒã·ã§ã³åãããå€æŽã«ããæãåçŽãªãã§ãã¯ããã¯ã¹ã®ã«ã¹ã¿ãã€ãºã®äŸã瀺ããŸãã ä»åãïŒã¯ããã¹ãã£ãã¯ã§ç§ãæã¡è² ããããšãã§ããŸãïŒç§ã¯ãã¶ã€ããŒã®çç·Žããæããæºåãããç»åã䜿çšããŸãã
16 x 16ã®8ã€ã®ç»åãåºæºãšããŠäœ¿çšãããŸã-4ã€ã®ãã§ãã¯ããã¯ã¹ããã¯ã°ã©ãŠã³ãç¶æ ãš4ã€ã®ãžã£ãã¯ããŒç¶æ ïŒå®éã«ã¯5ã€ã§ãããããã°ã©ã ã§5ã€ç®ãè¿œå ããŸãïŒ
![](https://habrastorage.org/storage/9bee854d/f27b7d25/c1b2b2b7/26287a2b.png)
ãã¡ãããæšæºã®ãã§ãã¯ããã¯ã¹ã«ã¯ãç¶æ ãã¢ãã¡ãŒãããããã®ã¹ãã©ã€ããèšå®ããæ©èœããããŸãããããã«ãããŸããŸãªããªãšãŒã·ã§ã³ã®èæ¯ã«ãžã£ãã¯ããŒç»åããªãŒããŒã¬ã€ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãå¥ã®ã¡ãœãããè¿œå ããŸãã
ããã€ãã®ç¶æ é·ç§»ãã³ãã©ãŒãè¿œå ããããšã¯æ®ãããããã®éã®ã¢ãã¡ãŒã·ã§ã³åãããé·ç§»ãååŸããŸããpublic static List <ImageIcon> BG_STATES = new ArrayList <ImageIcon> ();
public static List <ImageIcon> CHECK_STATES = new ArrayList <ImageIcon> ();
static
{
//
for ( int i = 1; i <= 4; i++ )
{
BG_STATES.add ( new ImageIcon (
MyCheckBox. class .getResource ( "icons/states/" + i + ".png" ) ) );
}
// ""
CHECK_STATES.add ( new ImageIcon (
new BufferedImage ( 16, 16, BufferedImage.TYPE_INT_ARGB ) ) );
//
for ( int i = 1; i <= 4; i++ )
{
CHECK_STATES.add ( new ImageIcon (
MyCheckBox. class .getResource ( "icons/states/c" + i + ".png" ) ) );
}
}
private Map< String , ImageIcon> iconsCache = new HashMap< String , ImageIcon> ();
private synchronized void updateIcon ()
{
//
final String key = bgIcon + "," + checkIcon;
if ( iconsCache.containsKey ( key ) )
{
//
setIcon ( iconsCache. get ( key ) );
}
else
{
//
BufferedImage b = new BufferedImage ( BG_STATES. get ( 0 ).getIconWidth (),
BG_STATES. get ( 0 ).getIconHeight (), BufferedImage.TYPE_INT_ARGB );
Graphics2D g2d = b.createGraphics ();
g2d.drawImage ( BG_STATES. get ( bgIcon ).getImage (), 0, 0,
BG_STATES. get ( bgIcon ).getImageObserver () );
g2d.drawImage ( CHECK_STATES. get ( checkIcon ).getImage (), 0, 0,
CHECK_STATES. get ( checkIcon ).getImageObserver () );
g2d.dispose ();
ImageIcon icon = new ImageIcon ( b );
iconsCache.put ( key, icon );
setIcon ( icon );
}
}
![](https://habrastorage.org/storage/bac7a5c4/b6777103/db0d86f7/1e465335.png)
çµæã®ã³ã³ããŒãã³ãã¯ãããšãã°ã©ãžãªãã¿ã³ã«å€æŽããããã¢ãã¡ãŒã·ã§ã³ãã¹ã ãŒãºã«ããããã«é·ç§»ç¶æ ãè¿œå ããããããªã©ãéåžžã«ç°¡åã«ãªããŸãã
å®éãå®å šãªåäœã³ãŒããšç»åã¯ããã«åå¥ã«ã¬ã€ã¢ãŠããããŠããŸã ã
ãããã£ãŠãèŠçŽ ãã«ã¹ã¿ãã€ãºããæ¹æ³ã¯å€æ°ãããŸãïŒããããããããã®äžéšã«ã€ããŠã¯ç¥ããªã/ç¥ããªãããšããããŸãïŒã ã©ã¡ããéžæãããã¯ãç¶æ³ã«ãã£ãŠç°ãªããŸã-åãåãå¿ èŠããããã®ãæ¢åã®ã³ã³ããŒãã³ãã«å ããããšãã§ããå€æŽãªã©ã
ãã®ç« ã®çµããã«ãã¢ãã¡ãŒã·ã§ã³ä»ãã®å®å šã«å€æŽãããUIãã¿ã³ãåã ã®è§ãäžžãããæ©èœãã¹ã¿ã€ã«ãã«ã¹ã¿ãã€ãºããæ©èœãããã³ãã®ä»ã®æ¹åç¹ã®å¥ã®äŸã瀺ããŸãã æçµçãªå€èŠ³ã®ã¹ã¯ãªãŒã³ã·ã§ããã次ã«ç€ºããŸãïŒãã¡ãããã¢ãã¡ãŒã·ã§ã³ã¯ããã«ã¯è¡šç€ºãããŸããïŒã
![](https://habrastorage.org/storage/f0147b74/0d76bfba/b4416c54/23c8afbd.png)
åã¯ã€ããŸãããããã®UIãã¿ã³ã¯å€ãã®æéãèŠããŸããããGraphics2DãšSwingã®çŽç²ãªæ段ã䜿çšãããã¶ã€ããŒã®å©ããšãã³ããªãã«äœæãããŸããã èå³ãããå Žåã¯ãããã§ãã®UIã®å®å šãªã³ãŒã¹ãšãã¢ãããŠã³ããŒãããŠåŠç¿ã§ããŸãã ããªãåºç¯å²ã®Graphics2Dæ©èœã䜿çšããå€ãã®å Žåã«åœ¹ç«ã€å¯èœæ§ã®ããããã€ãã®ããªãã¯ãé©çšããŸãã
ãããã£ãŠãã°ã©ãã£ãã¯ã¹ã«ã€ããŠã¯ååãªè©±ããããšæããŸããä»åŸã®ãããã¯ã§ããã«è©³ãã説æããŸãããããŠãSwingãšGraphics2Dãšã®ããªãé·ãæéã®ãã³ãã¥ãã±ãŒã·ã§ã³ãã§åŸãèå³æ·±ãè³æã玹ä»ããŸãã
DnDãšGlassPane
ç§ã¯æåã«æã-ããªãã¯ãã¹ãŠç¥ã£ãŠããã ãã§ãªããããã«é¢é£ããåé¡ã 2çªç®ã«ã€ããŠã¯ãGlassPaneã®ããšããã¶ãèããããšãããããæšæºãã¬ãŒã ã®ç°ãªãã¬ã€ã€ãŒã®é 眮ã«é¢ãããã®å€ä»£ã®ç»å ïŒã¡ãªã¿ã«ãŸã é¢é£ããŠããïŒãèŠãããšããããããããŸããã ããã«äœãããããªãç§ã¯ãããèŠããŠããŸãããïŒ ããã«ãDnDãšGlassPaneã¯ã©ã®ããã«é¢é£ããŠããŸããïŒ ããããŸãã«ããããã€ãªãæ¹æ³ã§ãããããããäœãã§ãããã§ããããã®ç« ã§äŒãããã
ããŠãé çªã«å§ããŸããã-DnDã«ã€ããŠäœãç¥ã£ãŠããŸããïŒ
äžéšã®Swingã³ã³ããŒãã³ãã«ã¯ãdrçšã®æ¢è£œã®å®è£ ïŒããšãã°ãJTreeãJListïŒããããŸã-ä»ã®ã³ã³ããŒãã³ãã§ã¯ãç¬èªã®ã³ã³ããŒãã³ããç°¡åã«è¿œå ã§ããŸãã èšèã颚ã«æã蟌ãŸãªãããã«ãã©ãã«ããã®DnDæååã®å°ããªäŸã瀺ããŸãã
ããã§ããã®ã©ãã«ã®ããã¹ããã€ã³ã¿ãŒãã§ã€ã¹ããçŽæ¥ããããããä»ããŠããã¹ããæ¿å ¥ã§ããä»ã®å Žæã«ãã©ãã°ã§ããŸããJLabel label = new JLabel ( " DnD" );
label.setTransferHandler ( new TransferHandler()
{
public int getSourceActions ( JComponent c )
{
return TransferHandler.COPY;
}
public boolean canImport ( TransferSupport support )
{
return false ;
}
protected Transferable createTransferable ( JComponent c )
{
return new StringSelection ( ( ( JLabel ) c ).getText () );
}
} );
label.addMouseListener ( new MouseAdapter()
{
public void mousePressed ( MouseEvent e )
{
if ( SwingUtilities.isLeftMouseButton ( e ) )
{
JComponent c = ( JComponent ) e.getSource ();
TransferHandler handler = c.getTransferHandler ();
handler.exportAsDrag ( c, e, TransferHandler.COPY );
}
}
} );
å®éãTransferHandlerã¯ããã©ãã°äžã«ã³ã³ããŒãã³ããæäŸããããŒã¿ãšããã©ãã°æã«ã³ã³ããŒãã³ããåä¿¡ããŒã¿ã䜿çšããæ¹æ³ãåŠçããŸãã
ãããããã©ãã°ã¢ã³ãããããæã®ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã®ã·ãŒã±ã³ã¹ã远跡ããå¿ èŠãããå Žåã¯ã©ãã§ããããã
ãããè¡ãã«ã¯ããªã¹ããŒããã³ã°ãããå¥ã®æ©äŒããããŸãã
æåŸã®ç¬éã¯æ®ããŸã-GlassPaneã®åœ¹å²ã瀺ããŸãã å®éãGlassPaneã䜿çšãããšãä»ã®ã³ã³ãããšåæ§ã«ã³ã³ããŒãã³ãèªäœãã³ã³ããŒãã³ãã«é 眮/æç»ã§ããŸããããã®ç¹åŸŽã¯ã衚瀺ãããŠãããšãã«ãã¹ãŠã®Swingã³ã³ããŒãã³ãã®äžã«é 眮ãããããšã§ãã ã€ãŸã ãã®äžã«äœããæããšããã®äžã®ã€ã³ã¿ãŒãã§ãŒã¹å šäœãã«ããŒããŸãã ããã«ãããã¡ã€ã³ã³ã³ããã«é¢ä¿ãªãã³ã³ããŒãã³ããé 眮ããèŠèŠå¹æãäœæããä»ã®èå³æ·±ãããšãå®è¡ã§ããŸããDragSourceAdapter dsa = new DragSourceAdapter()
{
public void dragEnter ( DragSourceDragEvent dsde )
{
// -
}
public void dragExit ( DragSourceEvent dse )
{
// -
}
public void dropActionChanged ( DragSourceDragEvent dsde )
{
//
}
public void dragOver ( DragSourceDragEvent dsde )
{
//
}
public void dragMouseMoved ( DragSourceDragEvent dsde )
{
//
}
public void dragDropEnd ( DragSourceDropEvent dsde )
{
//
}
};
DragSource.getDefaultDragSource ().addDragSourceListener ( dsa );
DragSource.getDefaultDragSource ().addDragSourceMotionListener ( dsa );
ç解ãæ·±ããããã«ããã®ãããªãå¹æãã®å°ããªäŸã瀺ããŸããSwingã³ã³ããŒãã³ããããã€ããããã¬ãŒã ã§ãã ãŠã£ã³ããŠã®ä»»æã®éšåãã¯ãªãã¯ãããšããåºãã£ãŠãããåã®å¹æã衚瀺ããããã¹ãŠã®èŠçŽ ã®äžã«è¡šç€ºãããŸãã æãèå³æ·±ãã®ã¯ãåæ§ã®å¹æããªãœãŒã¹ã浪費ããã倧éã®ã³ãŒããå¿ èŠãšããªãããšã§ãã ä¿¡ããããªãïŒ -ãã¢ãèŠãŠãjarã«åã蟌ãŸãããœãŒã¹ãèŠãŠãã ããã
ã¡ãªã¿ã«ããã®ãããã¯ã«ã¯ããªãèå³æ·±ãã©ã€ãã©ãªããããè¿œå ã®ã¹ã¯ããŒã«æ©èœãšããã€ãã®ä»ã®å©ç¹ãæäŸããŠããŸã-JXLayerïŒ ãªããµã€ã ïŒïŒ 説æïŒ1 説æïŒ2 説æïŒ3 ïŒã æ®å¿µãªãããJavaãµã€ãã§ãã¹ããããŠãããããžã§ã¯ãã¯çŸåšæé©ãªç¶æ ã§ã¯ãªããããåã ã®ãªãœãŒã¹ãåç §ããå¿ èŠããããŸãã
ããã§ããã®ç« ã§ãã§ã«èª¬æããããšããã¹ãŠçµ±åããæçµçã«äœããå®è¡ããŸãã ããšãã°ããŠã£ã³ããŠå ã«ã³ã³ããŒãã³ããããwithããã«ã衚瀺ããŸãã
![](https://habrastorage.org/storage/64299698/1cc95713/8308aaf0/d26c8c3b.png)
ããã«ãã©ãã«ã®åŸãã«ãã©ãã°ãããšããã©ãã°ã®æåŸã«ããã«ãé 眮ãããæ£ç¢ºãªå Žæã瀺ãããã«ã®åéæã®ã³ããŒã衚瀺ãããŸãã ESCããŒã䜿çšããŠç§»åããã£ã³ã»ã«ããããšãã§ããŸãã
ããã§å®éã®äŸãšãœãŒã¹ã³ãŒããååŸã§ããŸã ã
ãã¡ããããã®ç¹å®ã®æ©èœãå®è£ ããã«ã¯ãDnDã䜿çšããã ãã®äŸ¡å€ã¯ãããŸããããã£ãšçãæ¹æ³ããããŸãã ãã ããããã¯ãã¹ãŠç¶æ³ã«äŸåããŸãã ãã®ãªãã·ã§ã³ã䜿çšãããšããŠã£ã³ããŠå ã®ä»ã®ã³ã³ããŒãã³ããšã¯ç¡é¢ä¿ã«ãã©ãã°ã¢ã³ããããããæç»ã§ããŸãã ããã«åºã¥ããŠãããšãã°ãã¢ããªã±ãŒã·ã§ã³ãŠã£ã³ããŠéã«ãã©ãã°ããã«ãå®è£ ããããšãã§ããŸãã
AWTUtilities
JDK6ã«ã¯7kiããã®ããã€ãã®å°æ¥ã®ã€ãããŒã·ã§ã³ãé·ãéå«ãŸããŠãããããããããç¡èŠããããšã¯ã§ããŸããã圌ãã®å©ããããã°ãã¯ããã«å°ãªãåŽåã§å€ãã®ããšãã§ããããã§ãã
ãããã£ãŠãAWTUtilitiesã®ããã€ãã®ã¡ãœããã«èå³ããããŸãã
- AWTUtilities.setWindowShapeïŒãŠã£ã³ããŠã圢ç¶ïŒ-ä»»æã®ãŠã£ã³ããŠãç¹å®ã®åœ¢ç¶ã«èšå®ã§ããŸãïŒåãŸãã¯ããªãããŒãªå€è§åœ¢ïŒã ãã©ãŒã ãæ£ããèšå®ããã«ã¯ããŠã£ã³ããŠããã€ãã£ãã¹ã¿ã€ã«ïŒsetUndecoratedïŒtrueïŒïŒã§è£ 食ããªãã§ãã ããã
- AWTUtilities.setWindowOpacityïŒãŠã£ã³ããŠããããŒãïŒ-ãŠã£ã³ããŠã®éæ床ã0ïŒå®å šã«éæïŒãã1ïŒäžéæïŒã«èšå®ã§ããŸãã ãŠã£ã³ããŠã¯ãã€ãã£ãã¹ã¿ã€ã«ã§è£ 食ã§ããŸãã
- AWTUtilities.setWindowOpaqueïŒãŠã£ã³ããŠãããŒã«å€ïŒ-èæ¯è¡šç€ºãšãŠã£ã³ããŠè£ 食ãå®å šã«é衚瀺ã«ããããšãã§ããŸããããã®äžã«é 眮ãããã³ã³ããŒãã³ãã¯ãã¹ãŠè¡šç€ºãããŸãã ãã®ãã©ã¡ãŒã¿ãŒãæ£ããèšå®ããã«ã¯ããŠã£ã³ããŠãšæ®µèœ1ããã€ãã£ãã¹ã¿ã€ã«ã§è£ 食ããªãã§ãã ããã
ããã«ããäœãåŸãããŸããïŒ å®éãããªãåºãç¯å²ã®å¯èœæ§ã ã¢ããªã±ãŒã·ã§ã³ã®ãŠã£ã³ããŠã¯ãå¿ èŠãªããªãããŒãªãã©ãŒã ã«èšå®ããããã¢ããªã±ãŒã·ã§ã³ã®äžå€®ã«ç©ŽãéãããããŠã£ã³ããŠã®ã«ã¹ã¿ã ã·ã£ããŠãäœæããããèŠæ ãã®è¯ããããã¢ãããäœæãããã§ããŸãã
詳现ã«ç§»ãå ŽåããŠã£ã³ããŠã«äžãããããã©ãŒã ã¯å³å¯ã«ãšããžã®åšãã§ããªãã³ã°ãããããŸãèŠæ ããè¯ããªããããå®éã«ã¯setWindowShapeã䜿çšããŸããã SetWindowOpaqueã圹ç«ã¡ãŸã-ãŠã£ã³ããŠã®ãã¶ã€ã³ãšèæ¯ãé衚瀺ã«ããããšã§ãã«ã¹ã¿ã ã¬ã³ããªã³ã°ãããèæ¯ãæã€ã³ã³ããã䜿çšããŠãä»»æã®ãŠã£ã³ããŠãäœæã§ããŸãã 䜿çšã®å°ããªäŸã瀺ããŸãïŒãã®èšäºã®åã®ç« ã®ããã€ãã®ããªãã¯ã䜿çšããŸãïŒã
![](https://habrastorage.org/storage/b57296db/c800927d/ca0a6506/8549e45a.png)
ããã§ã¯ããœãŒã¹ã³ãŒãã䜿çšããŠäœæ¥çšã®jarãã¡ã€ã«ãååŸã§ããŸãã æ£çŽãªãšããããã®äŸã§ã¯10åããè²»ãããŠããŸããïŒãã®ãã¡ãçŽ5åã§ãã€ã¢ãã°å ã®èŠçŽ ãã©ã®ããã«é 眮ããã®ãçåã«æããŸãã:)ã åœç¶ãããã¯ãããã®æ°ããæ©äŒãæ¡çšããããã®ãªãã·ã§ã³ã®1ã€ã«ãããŸãã-å®éãããã«å€ãã®éžæè¢ããããŸãã
AWTUtilitiesã䜿çšããéã®å¯äžã®äžå¿«ãªããšã¯ãLinuxã·ã¹ãã ã§ã®äžå®å®ãªäœæ¥ã§ãã ã€ãŸã ã©ãã§ããªãããŠã£ã³ããŠã®éæ床ãåžžã«æ£ããæºããããã§ã¯ãããŸããã ãããçŸåšã®JDKãŸãã¯OSã«åé¡ããããã©ããã¯ããããŸããã
ã€ã³ã¿ã©ã¯ãã£ãã³ã³ããŒãã³ãã®äœæ
ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¿ãŒãã§ã€ã¹çšã®ã³ã³ããŒãã³ããUIãããã³ããã€ãã®ããã€ã¹ããã®äœææ¹æ³ã«ã€ããŠã¯ãã§ã«è¡šé¢çã«èª¬æããŸããããã³ã³ããŒãã³ãã«æ©èœéšåãè¿œå ããããæ©èœãšã¹ã¿ã€ã«ã䜿çšããŠç¬èªã®å®å šã«æ°ããã³ã³ããŒãã³ããäœæããå¿ èŠãããå Žåã¯ã©ãããã°ããã§ããïŒ æšæºã³ã³ããŒãã³ããå®ååããæ°ããã³ã³ããŒãã³ãã®å¥ã ã®éšåã«ããããšã¯ãã³ã³ããŒãã³ãã®1ã€ã«ããããªå€æŽãå ããŠãåè·¯å šäœã«ãããå Žåã«ã¯ãããªãé·ãéå±ãªäœæ¥ã§ãã ãã®ãããªå Žåãã³ã³ããŒãã³ããããŒããããäœæãã䟡å€ããããŸãã
ãã®ãããJComponentãããŒã¹ãšããŠããã€ã³ãã¡ãœããã䜿çšããŠãã®ã³ã³ãã³ããæç»ããã®ãæé©ã§ãã å®éãJComponentèªäœã¯ç©ºçœã®ãã£ã³ãã¹ã§ãããã¬ã³ããªã³ã°ãšæ¢æã®æšæºã¡ãœããsetEnabled / setFont / setForeground / setBackgroundãªã©ã®æç·ã®æ¹åãããã€ãè¡ãããŠããŸãã 䜿çšæ¹æ³ïŒããã³ãããã䜿çšãããã©ããïŒã¯ããªã次第ã§ãã ã¬ã³ããªã³ã°ã¡ãœããã«è¿œå ãããã®ã¯ãã¹ãŠã³ã³ããŒãã³ãã®äžéšã«ãªããã³ã³ããã«è¿œå ãããšè¡šç€ºãããŸãã
ãšããã§ãäœè«ã§ãããã³ã³ããã«ã€ããŠè©±ããŠããã®ã§ãåå«ãšJComponentèªäœã¯ã³ã³ããã§ãã ã€ã³ã¹ããŒã«ãããŠããã¬ã€ã¢ãŠãã³ã³ããŒãã³ãã«å¿ããŠé 眮ãããä»ã®ã³ã³ããŒãã³ããå«ããããšãã§ããŸãã ãã®ã³ã³ããŒãã³ãã«ããåã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ã¯ã©ããªã£ãŠããŸããïŒãŸãããã®ã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ãšã©ã®ããã«é¢é£ããŠããŸããïŒ ä»¥åã¯ãJcomponentã®ãã€ã³ãã¡ãœãããã©ã®ããã«æ§é åããæ¥ç¶ãããŠãããã«ã€ããŠã¯è©³ãã説æããŸããã§ããããããã§è©³çŽ°ã«èª¬æããŸã...
![](https://habrastorage.org/storage/b0b6cc8c/4b30305a/797f0587/b1aed4e4.png)
å®éãpaintïŒïŒã¡ãœããã«ã¯ãpaintComponentãpaintBorderãpaintChildrenã®3ã€ã®åå¥ã®ã¡ãœããã®åŒã³åºããå«ãŸããŠããŸãã ãã¡ããã圌ã¯ããã«ãå¥ã®é åã®å°å·ãåæç»ãªã©ãããã€ãã®ãç¹æ®ãªãã¬ã³ããªã³ã°ã®ã±ãŒã¹ãåŠçããŸãã ãããã®3ã€ã®ã¡ãœããã¯ãäžã®ç»åã«ç€ºãããŠããé åºã§åžžã«åŒã³åºãããŸãã ãããã£ãŠãæåã«ã³ã³ããŒãã³ãèªäœãæç»ããã次ã«å¢çç·ãäžã«æç»ããã次ã«åã³ã³ããŒãã³ããåŒã³åºãããŸããåã³ã³ããŒãã³ãã¯ããã«paintïŒïŒã¡ãœãããªã©ãåŒã³åºããŸãã åœç¶ãäžå¿ èŠãªã¬ã³ããªã³ã°ãé²ãããŸããŸãªæé©åããããŸãããããã«ã€ããŠã¯åŸã§èª¬æããŸãã
ã³ã³ããŒãã³ãã¯ã¬ã³ããªã³ã°ãããŸãããéçã§ãããåãªãã€ã¡ãŒãžã§ãã ããŠã¹ãšããŸããŸãªãããããŒã§ããããå¶åŸ¡ããæ©èœãåŠçããå¿ èŠããããŸãã
ãããè¡ãã«ã¯ããŸãé©åãªãªã¹ããŒïŒMouseListener / MouseMotionListener / KeyListenerïŒãã³ã³ããŒãã³ãèªäœã«è¿œå ããåã ã®ã¢ã¯ã·ã§ã³ãåŠçããå¿ èŠããããŸãã
ç§ã®æã®ãã¹ãŠã説æããªãããã«ãæž¡ãããImageIconãèŠèŠçã«ãµã€ãºå€æŽã§ããã³ã³ããŒãã³ãã®äŸã瀺ããŸãã
![](https://habrastorage.org/storage/72c5e56f/5b0aade5/822a9a60/6508a017.png)
ããã§ããœãŒã¹ã³ãŒããäžã«å«ãå®äŸãèŠãããšãã§ããŸãã
ãã®ã³ã³ããŒãã³ããäœæãããšããããã€ãã®éèŠãªãã€ã³ãã匷調ããŸãã
- ã³ã³ããŒãã³ãã®æ©èœãšå€èŠ³ã決å®ããŸãããã®å Žåãããã¯ãç»åãé 眮ãããé åãç»åã®åšå²ã®å¢çç·ãããã³é ã«ãã4ã€ã®ãªãµã€ã¶ãŒã§ãã åãµã€ãºå€æŽããŒã«ã䜿çšãããšãç»åã®ãµã€ãºãå€æŽã§ããŸãã ãŸããé åãäžå¿ã«ç»åã移åããäžå€®ã§ãã€ãããããšãã§ããŸãã
- ã³ã³ããŒãã³ããæ©èœããããã«å¿ èŠãªãã¹ãŠã®ãã©ã¡ãŒã¿ãŒã決å®ããŸãããã®å Žåãç»åèªäœãšãã®ãåç §ããã€ã³ãïŒå·Šäžé ãšå³äžé ïŒã§ãã ãŸãããµã€ãºå€æŽããã³drç»åã®å®è£ æã«å¿ èŠãšãªãå€ãã®å€æ°ããããŸãã
- ã³ã³ããŒãã³ãã®ç©ºçœãã©ããããŠããŸã ïŒè€æ°å䜿çšããå Žåã¯å¥ã®ã¯ã©ã¹ãæãŸããïŒ -ãã®å ŽåãImageResizeComponentã¯ã©ã¹ãäœæããã¬ã³ããªã³ã°ã«å¿ èŠãªãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãå®çŸ©ããpaintComponentïŒïŒã¡ãœãããåå®çŸ©ããã³ã³ãã³ããæç»ããŸãã ãŸããgetPreferredSizeïŒïŒã¡ãœãããåå®çŸ©ããŠãã³ã³ããŒãã³ãèªäœããã®ãæãŸããããµã€ãºã決å®ã§ããããã«ããŸãã
- ã³ã³ããŒãã³ãã®æ©èœéšåãå®è£ ããŸã -ãã®å ŽåãMouseAdapterã¯ãµã€ãºå€æŽãšç§»åãå®è£ ããã®ã«ååã§ãã â â , â . , â mouseMoved() .
, â - .
, Swing â .
- / Event Dispatch «» . Event Dispatch :
SwingUtilities.invokeLater ( new Runnable()
{
public void run ()
{
//
}
} );
- paint- , .
- â paint , , setEnabled(enabled). paint . ( ). .
- Event Dispatch . SwingUtilities.invokeLater().
- , , . /. , Event Dispatch .
- repaint() ( repaint(Rectangle) â ), repaint Event Dispatch . revalidate() ( Event Dispatch ). updateUI() ( ), , UI UI LaF'.
- LaF UI UI, LaF. LaF - .
, , /.
ãŸãšã
, . . , , -.
, , â , -. /, . ( ) / â .
«». :
![](https://habrastorage.org/storage/f8f3e753/38f941e2/7b651d11/f4c1a2d5.png)
«» .
, ( ), :
- Look and Feel'
- Graphics2D Java
- Skipy Swing
- Swing
- Apple guidelines â Java-, , â
- , Java
â .
Source Code Highlighter'y .
Update1: jar
Update2: jar /
Update3: jar