/** <Br/> */<br/> package client; </P> <p>/** <br/> * @ author administrator <br/> */</P> <p> Import Java. AWT. borderlayout; <br/> Import Java. AWT. color; <br/> Import Java. AWT. graphics2d; <br/> Import Java. AWT. renderinghints; <br/> Import Java. AWT. event. mouseevent; <br/> Import Java. AWT. event. mouselistener; <br/> Import Java. AWT. geom. affinetransform; <br/> Import Java. AWT. image. bufferedimage; <br /> Import Java. AWT. image. colormodel; <br/> Import Java. AWT. image. writableraster; <br/> Import Java. io. file; <br/> Import Java. io. ioexception; </P> <p> Import javax. imageIO. imageIO; <br/> Import javax. swing. boxlayout; <br/> Import javax. swing. imageicon; <br/> Import javax. swing. jdialog; <br/> Import javax. swing. jlabel; <br/> Import javax. swing. jpanel; <br/> Import javax. swing. jtabbedpane; <br/> Import javax. SWI Ng. border. border; <br/> Import javax. swing. border. lineborder; </P> <p> public class expression extends jdialog {<br/> @ suppresswarnings ("serial ") <br/> class mylabel extends jlabel {<br/> string name; </P> <p> mylabel (bufferedimage icon, string name) {<br/> setborder (New lineborder (getbackground (); <br/> This. name = Name; <br/> This. seticon (New imageicon (icon); <br/> addmouselistener (ML); <br/>}</P> <P> class mylistener implements mouselistener {<br/> Public void mouseclicked (mouseevent e) {<br/> mylabel ML = (mylabel) E. getcomponent (); <br/> system. out. print (Ml. name); </P> <p >}</P> <p> Public void mouseentered (mouseevent e) {<br/> setborder (E ); </P> <p >}</P> <p> Public void mouseexited (mouseevent e) {<br/> removeborder (E ); </P> <p >}</P> <p> Public void mousepressed (mouseevent e) {</P> <p >}</P> <p> Public Vo Id mousereleased (mouseevent e) {</P> <p >}</P> <p> private void removeborder (mouseevent e) {<br/> mylabel ML = (mylabel) e. getcomponent (); <br/> Border border = new lineborder (getbackground (); <br/> ML. setborder (Border); <br/>}</P> <p> private void setborder (mouseevent e) {<br/> mylabel ML = (mylabel) E. getcomponent (); <br/> Border border = new lineborder (new color (0x0000ff); <br/> ML. setborder (Border); <B R/>}< br/> private jtabbedpane jtp; <br/> private jpanel JP; <br/> private mylistener mL; <br/> private file [] parentfiles; </P> <p>/** <br/> */<br/> Private Static final long serialversionuid = 1l; <br/> Public static void main (string [] ARGs) {<br/> new expression (); <br/>}< br/> Public static bufferedimage resize (bufferedimage source, int HW) {<br/> // targetw, targeth indicates the target length and width respectively. <br/> int t Ype = source. getType (); <br/> bufferedimage target = NULL; <br/> double SX = (double) HW/source. getwidth (); <br/> double Sy = (double) HW/source. getheight (); <br/> // here you want to achieve proportional scaling within the range of targetw and targeth. If proportional scaling is not required <br/> //, comment out the following if else statement <br/> If (SX> Sy) {<br/> SX = sy; <br/> hW = (INT) (SX * Source. getwidth (); <br/>}else {<br/> Sy = SX; <br/> hW = (INT) (SY * Source. getheight (); <br/>}< br/> If (type = bufferedimage. type_custom) {// handmade <br/> colormodel CM = source. getcolormodel (); <br/> writableraster raster = cm. createcompatiblewritableraster (HW, HW); <br/> Boolean alphapremultiplied = C M. isalphapremultiplied (); <br/> Target = new bufferedimage (CM, raster, alphapremultiplied, null); <br/>} else {<br/> Target = new bufferedimage (HW, hw, type); <br/>}< br/> graphics2d G = target. creategraphics (); <br/> // smoother than exlax: <br/> G. setrenderinghint (renderinghints. key_rendering, renderinghints. value_render_quality); <br/> G. drawrenderedimage (source, affinetransform. getscaleinstance (sx, Sy); <br/> G. dispose (); <br/> return target; <br/>}< br/> Public static void saveimageasjpg (File fromfile, string savetofilestr, int HW) throws exception {<br/> bufferedimage srcimage; <br/> string imgtype = "Jpeg"; <br/> file SaveFile = new file (savetofilestr ); <br/> srcimage = ImageIO. read (fromfile); <br/> srcimage = resize (srcimage, HW); <br/> ImageIO. write (srcimage, imgtype, SaveFile); </P> <p >}</P> <p> Public expression () {<br/> This. setundecorated (true); <br/> jtp = new jtabbedpane (); <br/> ML = new mylistener (); <br/> file dir = new file ("images/"); <br/> parentfiles = dir. listfiles (); <br/>/** obtain all the files in the images folder and display them one by one */<br/> for (file F: parentfiles) {<br/>/** select a folder */<br/> If (F. isdirectory () {<br/> file minidir = new file (F, "mini"); <br/> JP = new jpanel (); <br/> JP. setlayout (New boxlay Out (JP, boxlayout. y_axis); <br/> JP. setname (F. getname (); <br/> try {<br/> If (! Minidir. exists () {<br/>/** if there is no mini folder, create one. And generate a thumbnail */<br/> minidir. mkdir (); <br/> creatmini (F. listfiles (); <br/>}< br/>/** display the thumbnail in the mini folder */<br/> showexpression (minidir. listfiles (); <br/>} catch (ioexception E) {<br/> // todo <br/>}< br/>/** after adding the image in this folder to the jpanel, display this on jtabbedpane */<br/> jtp. add (JP); <br/>}< br/> initgui (); </P> <p >}</P> <p> private void creatmini (file [] files) {<br/> int K; <br/> for (file F: Files) {<br/> string saveto = f. getname (). tolowercase (); <br/> If (saveto. endswith (". GIF ") | saveto. endswith (". PNG ") | saveto. endswith (". jpg ") | saveto. endswith (". JPEG ") {<br/> K = saveto. lastindexof ('. '); <br/> saveto = saveto. substring (0, k) + ". jpg "; <br/> saveto = f. getparent () + "// mini //" + saveto; <br/> try {<br/> saveimageasjpg (F, saveto, 25 ); <br/>} catch (exception e) {<br/> E. printstacktrace (); <br/>}< br/> private void initgui () {<br/> Add (jtp, borderlayout. center); <br/> pack (); <br/> setvisible (true); <br/>}< br/> private void showexpression (file [] files) throws ioexception {<br/> int num = files. length; <br/> string name; <br/> jpanel tempp = new jpanel (); <br/> int K; <br/> int cnum = (INT) math. SQRT (Num); <br/> for (INT I = 0; I <num; I ++) {<br/> if (I> 0 & I % cnum = 0) {<br/> JP. add (tempp); <br/> tempp = new jpanel (); <br/>}< br/> bufferedimage icon = ImageIO. read (files [I]); <br/> name = files [I]. getname (); <br/> K = Name. indexof ('. '); <br/> name = Name. substring (0, k); <br/> tempp. add (New mylabel (icon, name); <br/>}< br/> JP. add (tempp); <br/>}</P> <p>